@@ -57,13 +57,106 @@ Notice we cannot move 10 -> 2 to finish the game, because that would be an il
57
57
### ** Python3**
58
58
59
59
``` python
60
-
60
+ class Solution :
61
+ def numMovesStonesII (self , stones : List[int ]) -> List[int ]:
62
+ stones.sort()
63
+ mi = n = len (stones)
64
+ mx = max (stones[- 1 ] - stones[1 ] + 1 , stones[- 2 ] - stones[0 ] + 1 ) - (n - 1 )
65
+ i = 0
66
+ for j, x in enumerate (stones):
67
+ while x - stones[i] + 1 > n:
68
+ i += 1
69
+ if j - i + 1 == n - 1 and x - stones[i] == n - 2 :
70
+ mi = min (mi, 2 )
71
+ else :
72
+ mi = min (mi, n - (j - i + 1 ))
73
+ return [mi, mx]
61
74
```
62
75
63
76
### ** Java**
64
77
65
78
``` java
79
+ class Solution {
80
+ public int [] numMovesStonesII (int [] stones ) {
81
+ Arrays . sort(stones);
82
+ int n = stones. length;
83
+ int mi = n;
84
+ int mx = Math . max(stones[n - 1 ] - stones[1 ] + 1 , stones[n - 2 ] - stones[0 ] + 1 ) - (n - 1 );
85
+ for (int i = 0 , j = 0 ; j < n; ++ j) {
86
+ while (stones[j] - stones[i] + 1 > n) {
87
+ ++ i;
88
+ }
89
+ if (j - i + 1 == n - 1 && stones[j] - stones[i] == n - 2 ) {
90
+ mi = Math . min(mi, 2 );
91
+ } else {
92
+ mi = Math . min(mi, n - (j - i + 1 ));
93
+ }
94
+ }
95
+ return new int [] {mi, mx};
96
+ }
97
+ }
98
+ ```
99
+
100
+ ### ** C++**
101
+
102
+ ``` cpp
103
+ class Solution {
104
+ public:
105
+ vector<int > numMovesStonesII(vector<int >& stones) {
106
+ sort(stones.begin(), stones.end());
107
+ int n = stones.size();
108
+ int mi = n;
109
+ int mx = max(stones[ n - 1] - stones[ 1] + 1, stones[ n - 2] - stones[ 0] + 1) - (n - 1);
110
+ for (int i = 0, j = 0; j < n; ++j) {
111
+ while (stones[ j] - stones[ i] + 1 > n) {
112
+ ++i;
113
+ }
114
+ if (j - i + 1 == n - 1 && stones[ j] - stones[ i] == n - 2) {
115
+ mi = min(mi, 2);
116
+ } else {
117
+ mi = min(mi, n - (j - i + 1));
118
+ }
119
+ }
120
+ return {mi, mx};
121
+ }
122
+ };
123
+ ```
66
124
125
+ ### **Go**
126
+
127
+ ```go
128
+ func numMovesStonesII(stones []int) []int {
129
+ sort.Ints(stones)
130
+ n := len(stones)
131
+ mi := n
132
+ mx := max(stones[n-1]-stones[1]+1, stones[n-2]-stones[0]+1) - (n - 1)
133
+ i := 0
134
+ for j, x := range stones {
135
+ for x-stones[i]+1 > n {
136
+ i++
137
+ }
138
+ if j-i+1 == n-1 && stones[j]-stones[i] == n-2 {
139
+ mi = min(mi, 2)
140
+ } else {
141
+ mi = min(mi, n-(j-i+1))
142
+ }
143
+ }
144
+ return []int{mi, mx}
145
+ }
146
+
147
+ func max(a, b int) int {
148
+ if a > b {
149
+ return a
150
+ }
151
+ return b
152
+ }
153
+
154
+ func min(a, b int) int {
155
+ if a < b {
156
+ return a
157
+ }
158
+ return b
159
+ }
67
160
```
68
161
69
162
### ** ...**
0 commit comments