File tree Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Expand file tree Collapse file tree 3 files changed +62
-0
lines changed Original file line number Diff line number Diff line change 33
33
69. x 的平方根
34
34
70. 爬楼梯
35
35
72. 编辑距离
36
+ 75. 颜色分类
36
37
76. 最小覆盖子串
37
38
77. 组合
38
39
78. 子集
Original file line number Diff line number Diff line change 145
145
41. 缺失的第一个正数
146
146
54. 螺旋矩阵
147
147
56. 合并区间
148
+ 75. 颜色分类
148
149
88. 合并两个有序数组
149
150
136. 只出现一次的数字
150
151
169. 多数元素
Original file line number Diff line number Diff line change
1
+ // 75. 颜色分类
2
+
3
+
4
+ /*
5
+ 单指针:两次遍历,第一次把0交换到前面,第二次把1交换到前面
6
+ */
7
+ class Solution {
8
+ public void sortColors (int [] nums ) {
9
+ int index = 0 , n = nums .length ;
10
+ for (int i = 0 ; i < n ; i ++) {
11
+ if (nums [i ] == 0 ) {
12
+ swap (nums , i , index );
13
+ index ++;
14
+ }
15
+ }
16
+ for (int i = index ; i < n ; i ++) {
17
+ if (nums [i ] == 1 ) {
18
+ swap (nums , i , index );
19
+ index ++;
20
+ }
21
+ }
22
+ }
23
+
24
+ private void swap (int [] nums , int x , int y ) {
25
+ int temp = nums [x ];
26
+ nums [x ] = nums [y ];
27
+ nums [y ] = temp ;
28
+ }
29
+ }
30
+
31
+
32
+ /*
33
+ 双指针:
34
+ 1、p0、p2指针分别指向首尾
35
+ 2、遍历到p2指针位置时结束,防止交换完的元素2又被错误地换到前面
36
+ 3、由于可能存在2换2的情况,使用while循环将元素2交换到尾部,确保当前位置不是元素2
37
+ 4、当前位置的元素2交换完后,再判断交换元素0到头部
38
+ */
39
+ class Solution {
40
+ public void sortColors (int [] nums ) {
41
+ int n = nums .length ;
42
+ int p0 = 0 , p2 = n - 1 ;
43
+ for (int i = 0 ; i <= p2 ; i ++) {
44
+ while (i <= p2 && nums [i ] == 2 ) {
45
+ swap (nums , i , p2 );
46
+ p2 --;
47
+ }
48
+ if (nums [i ] == 0 ) {
49
+ swap (nums , i , p0 );
50
+ p0 ++;
51
+ }
52
+ }
53
+ }
54
+
55
+ private void swap (int [] nums , int x , int y ) {
56
+ int temp = nums [x ];
57
+ nums [x ] = nums [y ];
58
+ nums [y ] = temp ;
59
+ }
60
+ }
You can’t perform that action at this time.
0 commit comments