File tree Expand file tree Collapse file tree 1 file changed +68
-0
lines changed
animation-simulation/数据结构和算法 Expand file tree Collapse file tree 1 file changed +68
-0
lines changed Original file line number Diff line number Diff line change 72
72
73
73
下面我们直接看代码吧,和三向切分基本一致。
74
74
75
+ Java Code:
76
+
75
77
``` java
76
78
class Solution {
77
79
public void sortColors (int [] nums ) {
@@ -99,6 +101,37 @@ class Solution {
99
101
}
100
102
```
101
103
104
+ C++ Code:
105
+
106
+ ``` c++
107
+ class Solution {
108
+ public:
109
+ void sortColors(vector<int >& nums) {
110
+ int len = nums.size();
111
+ int left = 0;
112
+ //这里和三向切分不完全一致
113
+ int i = left;
114
+ int right = len-1;
115
+
116
+ while (i <= right) {
117
+ if (nums[ i] == 2) {
118
+ swap(nums,i,right--);
119
+ } else if (nums[ i] == 0) {
120
+ swap(nums,i++,left++);
121
+ } else {
122
+ i++;
123
+ }
124
+ }
125
+ }
126
+
127
+ void swap (vector<int>& nums, int i, int j) {
128
+ int temp = nums[i];
129
+ nums[i] = nums[j];
130
+ nums[j] = temp;
131
+ }
132
+ };
133
+ ```
134
+
102
135
另外我们看这段代码,有什么问题呢?那就是我们即使完全符合时,仍会交换元素,这样会大大降低我们的效率。
103
136
104
137
例如:[ 0,0,0,1,1,1,2,2,2]
@@ -117,6 +150,8 @@ class Solution {
117
150
118
151
另一种代码表示
119
152
153
+ Java Code:
154
+
120
155
``` java
121
156
class Solution {
122
157
public void sortColors (int [] nums ) {
@@ -148,5 +183,38 @@ class Solution {
148
183
}
149
184
```
150
185
186
+ C++ Code:
187
+
188
+ ``` c++
189
+ class Solution {
190
+ public:
191
+ void sortColors(vector<int >& nums) {
192
+ int left = 0;
193
+ int len = nums.size();
194
+ int right = len - 1;
195
+ for (int i = 0; i <= right; ++i) {
196
+ if (nums[ i] == 0) {
197
+ swap(nums,i,left);
198
+ left++;
199
+ }
200
+ if (nums[ i] == 2) {
201
+ swap(nums,i,right);
202
+ right--;
203
+ //如果不等于 1 则需要继续判断,所以不移动 i 指针,i--
204
+ if (nums[ i] != 1) {
205
+ i--;
206
+ }
207
+ }
208
+ }
209
+
210
+ }
211
+ void swap (vector<int >& nums, int i, int j) {
212
+ int temp = nums[ i] ;
213
+ nums[ i] = nums[ j] ;
214
+ nums[ j] = temp;
215
+ }
216
+ };
217
+ ```
218
+
151
219
好啦,这个问题到这就结束啦,是不是很简单啊,我们明天见!
152
220
You can’t perform that action at this time.
0 commit comments