Skip to content

Commit f51ee92

Browse files
authored
Update 荷兰国旗.md
add C++ Code
1 parent b470e3d commit f51ee92

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

animation-simulation/数据结构和算法/荷兰国旗.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@
7272

7373
下面我们直接看代码吧,和三向切分基本一致。
7474

75+
Java Code:
76+
7577
```java
7678
class Solution {
7779
public void sortColors(int[] nums) {
@@ -99,6 +101,37 @@ class Solution {
99101
}
100102
```
101103

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+
102135
另外我们看这段代码,有什么问题呢?那就是我们即使完全符合时,仍会交换元素,这样会大大降低我们的效率。
103136

104137
例如:[0,0,0,1,1,1,2,2,2]
@@ -117,6 +150,8 @@ class Solution {
117150

118151
另一种代码表示
119152

153+
Java Code:
154+
120155
```java
121156
class Solution {
122157
public void sortColors(int[] nums) {
@@ -148,5 +183,38 @@ class Solution {
148183
}
149184
```
150185

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+
151219
好啦,这个问题到这就结束啦,是不是很简单啊,我们明天见!
152220

0 commit comments

Comments
 (0)