File tree Expand file tree Collapse file tree 1 file changed +7
-5
lines changed Expand file tree Collapse file tree 1 file changed +7
-5
lines changed Original file line number Diff line number Diff line change @@ -43,10 +43,12 @@ public:
43
43
int right = 0;
44
44
const int size = nums.size();
45
45
for (int i = 0; i < size; ++i) {
46
- if (nums[ i] < k && i >= right) {
47
- int temp = nums[ i] ;
48
- nums[ i] = nums[ right] ;
49
- nums[ right] = temp;
46
+ if (nums[ i] < k) {
47
+ if (i != right) {
48
+ int temp = nums[ i] ;
49
+ nums[ i] = nums[ right] ;
50
+ nums[ right] = temp;
51
+ }
50
52
++right;
51
53
}
52
54
}
@@ -58,7 +60,7 @@ public:
58
60
59
61
### 源码分析
60
62
61
- 自左向右遍历,遇到小于 k 的元素时即和` right ` 索引处元素交换,并自增` right ` 指向下一个元素,这样就能保证` right ` 之前的元素一定小于 k. 注意 ` if ` 判断条件中 ` i >= right ` 不能是 ` i > right ` , 否则需要对特殊情况如全小于 k 时的考虑,而且即使考虑了这一特殊情况也可能存在其他 bug. 具体是什么 bug 呢?欢迎提出你的分析意见 ~
63
+ 自左向右遍历,遇到小于 k 的元素时即和` right ` 索引处元素交换,并自增` right ` 指向下一个元素,这样就能保证` right ` 之前的元素一定小于 k.
62
64
63
65
### 复杂度分析
64
66
You can’t perform that action at this time.
0 commit comments