Skip to content

Commit 15d05ac

Browse files
committed
Runtime: 14 ms (Top 88.14%) | Memory: 13.50 MB (Top 98.31%)
1 parent 9bf0cf5 commit 15d05ac

File tree

1 file changed

+33
-12
lines changed

1 file changed

+33
-12
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,35 @@
1+
// Runtime: 14 ms (Top 88.14%) | Memory: 13.50 MB (Top 98.31%)
2+
13
class Solution {
24
public:
3-
vector<int> numMovesStonesII(vector<int>& stones) {
4-
sort(begin(stones), end(stones));
5-
int n = size(stones), ii = 0, low = INT_MAX, high = max(stones[n-2] - stones[0], stones[n-1] - stones[1]) - (n - 2);
6-
7-
for (int i = 0; i < n; ++i) {
8-
while (stones[i] - stones[ii] >= n) ++ii;
9-
if (i - ii + 1 == n - 1 && stones[i] - stones[ii] == n - 2) low = min(low, 2);
10-
else low = min(low, n - (i - ii + 1));
11-
}
12-
return {low, high};
13-
}
14-
};
5+
vector<int> numMovesStonesII(vector<int>& stones) {
6+
sort(stones.begin(),stones.end());
7+
int n=stones.size();
8+
int MAX=0;
9+
int MIN=INT_MAX;
10+
int a=stones.back()-stones[1]+1-(n-1);
11+
int b=stones[n-2]-stones[0]+1-(n-1);
12+
int j=0;
13+
MAX=max(a,b);
14+
for(int i=0;i<n;i++){
15+
while(j<n && stones[j]-stones[i]+1<n){
16+
j++;
17+
}
18+
if(j>=n){
19+
break;
20+
}
21+
int gap;
22+
if(stones[j]-stones[i]+1==n){
23+
gap=n-(j-i+1);
24+
}
25+
else if(j-1-i+1==n-1){
26+
gap=2;
27+
}
28+
else{
29+
gap=n-(j-1-i+1);
30+
}
31+
MIN=min(MIN,gap);
32+
}
33+
return {MIN,MAX};
34+
}
35+
};

0 commit comments

Comments
 (0)