File tree 5 files changed +33
-53
lines changed
0237.Delete Node in a Linked List
0238.Product of Array Except Self
5 files changed +33
-53
lines changed Original file line number Diff line number Diff line change 42
42
43
43
<!-- 这里可写通用的实现逻辑 -->
44
44
45
+ ** 方法一:节点赋值**
46
+
45
47
将 ` node.next ` 节点的值赋给 ` node ` ,然后将 ` node.next ` 指向 ` node.next ` 的下一个节点。
46
48
47
49
<!-- tabs:start -->
Original file line number Diff line number Diff line change @@ -196,29 +196,19 @@ function productExceptSelf(nums: number[]): number[] {
196
196
197
197
### ** Go**
198
198
199
- 利用前缀和思想,分别求出 ` i ` 左右两侧的乘积
200
-
201
199
``` go
202
200
func productExceptSelf (nums []int ) []int {
203
201
n := len (nums)
204
-
205
- l := make ([]int , n)
206
- l[0 ] = 1
207
- for i := 1 ; i < n; i++ {
208
- l[i] = l[i-1 ] * nums[i-1 ]
209
- }
210
-
211
- r := make ([]int , n)
212
- r[n-1 ] = 1
213
- for i := n - 2 ; i >= 0 ; i-- {
214
- r[i] = r[i+1 ] * nums[i+1 ]
215
- }
216
-
217
202
ans := make ([]int , n)
203
+ left , right := 1 , 1
218
204
for i := 0 ; i < n; i++ {
219
- ans[i] = l[i] * r[i]
205
+ ans[i] = left
206
+ left *= nums[i]
207
+ }
208
+ for i := n - 1 ; i >= 0 ; i-- {
209
+ ans[i] *= right
210
+ right *= nums[i]
220
211
}
221
-
222
212
return ans
223
213
}
224
214
```
Original file line number Diff line number Diff line change @@ -124,24 +124,16 @@ function productExceptSelf(nums: number[]): number[] {
124
124
``` go
125
125
func productExceptSelf (nums []int ) []int {
126
126
n := len (nums)
127
-
128
- l := make ([]int , n)
129
- l[0 ] = 1
130
- for i := 1 ; i < n; i++ {
131
- l[i] = l[i-1 ] * nums[i-1 ]
132
- }
133
-
134
- r := make ([]int , n)
135
- r[n-1 ] = 1
136
- for i := n - 2 ; i >= 0 ; i-- {
137
- r[i] = r[i+1 ] * nums[i+1 ]
138
- }
139
-
140
127
ans := make ([]int , n)
128
+ left , right := 1 , 1
141
129
for i := 0 ; i < n; i++ {
142
- ans[i] = l[i] * r[i]
130
+ ans[i] = left
131
+ left *= nums[i]
132
+ }
133
+ for i := n - 1 ; i >= 0 ; i-- {
134
+ ans[i] *= right
135
+ right *= nums[i]
143
136
}
144
-
145
137
return ans
146
138
}
147
139
```
Original file line number Diff line number Diff line change 1
1
func productExceptSelf (nums []int ) []int {
2
2
n := len (nums )
3
-
4
- l := make ([]int , n )
5
- l [0 ] = 1
6
- for i := 1 ; i < n ; i ++ {
7
- l [i ] = l [i - 1 ] * nums [i - 1 ]
8
- }
9
-
10
- r := make ([]int , n )
11
- r [n - 1 ] = 1
12
- for i := n - 2 ; i >= 0 ; i -- {
13
- r [i ] = r [i + 1 ] * nums [i + 1 ]
14
- }
15
-
16
3
ans := make ([]int , n )
4
+ left , right := 1 , 1
17
5
for i := 0 ; i < n ; i ++ {
18
- ans [i ] = l [i ] * r [i ]
6
+ ans [i ] = left
7
+ left *= nums [i ]
8
+ }
9
+ for i := n - 1 ; i >= 0 ; i -- {
10
+ ans [i ] *= right
11
+ right *= nums [i ]
19
12
}
20
-
21
13
return ans
22
- }
14
+ }
Original file line number Diff line number Diff line change 57
57
58
58
<!-- 这里可写通用的实现逻辑 -->
59
59
60
- 第一个得到 4 的倍数(即 n % 4 == 0)的将会输掉比赛。
60
+ ** 方法一:数学推理**
61
+
62
+ 第一个得到 $4$ 的倍数(即 $n$ 能被 $4$ 整除)的将会输掉比赛。
61
63
62
64
证明:
63
65
64
- 1 . 当 ` n == 4 ` ,无论第一个玩家选择 1/2/3 哪个数字,第二个玩家总能选择剩下的数字,** 第一个玩家将会输掉比赛** 。
65
- 1 . 当 ` 4 < n < 8 ` ,即 (n = 5,6,7),第一个玩家可以相应地将数字减少为 4 ,那么 4 这个死亡数字给到了第二个玩家,第二个玩家将会输掉比赛。
66
- 1 . 当 ` n == 8 ` ,无论第一个玩家选择 1/2/3 哪个数字,都会把 ` 4 < n < 8 ` 的数字留给第二个,** 第一个玩家将会输掉比赛** 。
66
+ 1 . 当 $n=4$ ,无论第一个玩家选择 $ 1/2/3$ 哪个数字,第二个玩家总能选择剩下的数字,** 第一个玩家将会输掉比赛** 。
67
+ 1 . 当 $4<n<8$ ,即 ($n= 5,6,7$ ),第一个玩家可以相应地将数字减少为 $4$ ,那么 $4$ 这个死亡数字给到了第二个玩家,第二个玩家将会输掉比赛。
68
+ 1 . 当 $n=8$ ,无论第一个玩家选择 $ 1/2/3$ 哪个数字,都会把 $4<n<8$ 的数字留给第二个,** 第一个玩家将会输掉比赛** 。
67
69
1 . ...
68
- 1 . 依次类推,当玩家拿到 n 这个数字,且 n 能被 4 整除,即 ` n % 4 == 0 ` ,他将会输掉比赛,否则他将赢得比赛。
70
+ 1 . 依次类推,当玩家拿到 $n$ 这个数字,且 $n$ 能被 $4$ 整除,他将会输掉比赛,否则他将赢得比赛。
71
+
72
+ 时间复杂度 $O(1)$。
69
73
70
74
<!-- tabs:start -->
71
75
You can’t perform that action at this time.
0 commit comments