- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmove-zero.ts
60 lines (53 loc) · 1.24 KB
/
move-zero.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* @description 移动0到数组末尾
* @author tangc1
* @date 2022-05-04 19:03:56
*/
/**
* 嵌套循环法
* param { array } arr
* return {}
*/
exportfunctionmoveZero1(arr: number[]): void{
constlength=arr.length
if(length===0)return
letzeroLength=0
// O(n^2)
for(leti=0;i<length-zeroLength;i++){
if(arr[i]==0){
arr.push(0)
arr.splice(i,1)// O(n)
i--;// 数组截取了一个元素,i要递减,否则遇到连续0就会有错误
zeroLength++
}
}
}
/**
* @description 双指针
* param { array } arr
* return {}
*/
exportfunctionmoveZero2(arr: number[]): void{
constlength=arr.length
if(length===0)return
leti
letj=-1// 指向第一个 0
for(i=0;i<length;i++){
if(arr[i]===0){
// 第一个 0
if(j<0){
j=i
}
}
if(arr[i]!==0&&j>=0){
[arr[i],arr[j]]=[arr[j],arr[i]]
// const temp = arr[i]
// arr[i] = arr[j]
// arr[j] = temp
j++
}
}
}
// const arr = [1, 0, 3, 4, 0, 0, 11, 0]
// moveZero2(arr)
// console.info(arr);