Skip to content

Commit b9da045

Browse files
committed
feat: add solutions to lc problems: No.0724,1991
* No.0724.Find Pivot Index * No.1991.Find the Middle Index in Array
1 parent cba9566 commit b9da045

File tree

17 files changed

+351
-316
lines changed

17 files changed

+351
-316
lines changed

solution/0700-0799/0724.Find Pivot Index/README.md

+69-104
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,19 @@
6464

6565
**方法一:前缀和**
6666

67+
我们定义变量 $left$ 表示数组 `nums` 中下标 $i$ 左侧元素之和,变量 $right$ 表示数组 `nums` 中下标 $i$ 右侧元素之和。初始时 $left = 0$, $right = \sum_{i = 0}^{n - 1} nums[i]$。
68+
69+
遍历数组 `nums`,对于当前遍历到的数字 $x$,我们更新 $right = right - x$,此时如果 $left=right$,说明当前下标 $i$ 就是中间位置,直接返回即可。否则,我们更新 $left = left + x$,继续遍历下一个数字。
70+
71+
遍历结束,如果没有找到中间位置,返回 $-1$。
72+
73+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `nums` 的长度。
74+
75+
相似题目:
76+
77+
- [1991. 找到数组的中间位置](/solution/1900-1999/1991.Find%20the%20Middle%20Index%20in%20Array/README.md)
78+
- [2574. 左右元素和的差值](/solution/2500-2599/2574.Left%20and%20Right%20Sum%20Differences/README.md)
79+
6780
<!-- tabs:start -->
6881

6982
### **Python3**
@@ -73,23 +86,12 @@
7386
```python
7487
class Solution:
7588
def pivotIndex(self, nums: List[int]) -> int:
76-
s, presum = sum(nums), 0
77-
for i, v in enumerate(nums):
78-
if (presum << 1) == s - v:
89+
left, right = 0, sum(nums)
90+
for i, x in enumerate(nums):
91+
right -= x
92+
if left == right:
7993
return i
80-
presum += v
81-
return -1
82-
```
83-
84-
```python
85-
class Solution:
86-
def pivotIndex(self, nums: List[int]) -> int:
87-
l, r = 0, sum(nums)
88-
for i, v in enumerate(nums):
89-
r -= v
90-
if l == r:
91-
return i
92-
l += v
94+
left += x
9395
return -1
9496
```
9597

@@ -100,90 +102,32 @@ class Solution:
100102
```java
101103
class Solution {
102104
public int pivotIndex(int[] nums) {
103-
int n = nums.length, s = 0;
104-
for (int e : nums) {
105-
s += e;
106-
}
107-
int presum = 0;
108-
for (int i = 0; i < n; ++i) {
109-
// presum == sums - nums[i] - presum
110-
if (presum << 1 == s - nums[i]) {
111-
return i;
112-
}
113-
presum += nums[i];
114-
}
115-
return -1;
116-
}
117-
}
118-
```
119-
120-
```java
121-
class Solution {
122-
public int pivotIndex(int[] nums) {
123-
int l = 0, r = 0;
124-
for (int v : nums) {
125-
r += v;
126-
}
105+
int left = 0, right = Arrays.stream(nums).sum();
127106
for (int i = 0; i < nums.length; ++i) {
128-
r -= nums[i];
129-
if (l == r) {
107+
right -= nums[i];
108+
if (left == right) {
130109
return i;
131110
}
132-
l += nums[i];
111+
left += nums[i];
133112
}
134113
return -1;
135114
}
136115
}
137116
```
138117

139-
### **TypeScript**
140-
141-
```ts
142-
function pivotIndex(nums: number[]): number {
143-
let l = 0;
144-
let r = nums.reduce((a, b) => a + b, 0);
145-
for (let i = 0; i < nums.length; ++i) {
146-
r -= nums[i];
147-
if (l == r) {
148-
return i;
149-
}
150-
l += nums[i];
151-
}
152-
return -1;
153-
}
154-
```
155-
156118
### **C++**
157119

158120
```cpp
159121
class Solution {
160122
public:
161123
int pivotIndex(vector<int>& nums) {
162-
int s = 0;
163-
for (int e : nums)
164-
s += e;
165-
int presum = 0;
124+
int left = 0, right = accumulate(nums.begin(), nums.end(), 0);
166125
for (int i = 0; i < nums.size(); ++i) {
167-
if (presum * 2 == s - nums[i])
126+
right -= nums[i];
127+
if (left == right) {
168128
return i;
169-
presum += nums[i];
170-
}
171-
return -1;
172-
}
173-
};
174-
```
175-
176-
```cpp
177-
class Solution {
178-
public:
179-
int pivotIndex(vector<int>& nums) {
180-
int l = 0, r = 0;
181-
for (int& v : nums) r += v;
182-
for (int i = 0; i < nums.size(); ++i)
183-
{
184-
r -= nums[i];
185-
if (l == r) return i;
186-
l += nums[i];
129+
}
130+
left += nums[i];
187131
}
188132
return -1;
189133
}
@@ -194,35 +138,56 @@ public:
194138
195139
```go
196140
func pivotIndex(nums []int) int {
197-
s := 0
198-
for _, e := range nums {
199-
s += e
141+
var left, right int
142+
for _, x := range nums {
143+
right += x
200144
}
201-
presum := 0
202-
for i, e := range nums {
203-
if presum<<1 == s-e {
145+
for i, x := range nums {
146+
right -= x
147+
if left == right {
204148
return i
205149
}
206-
presum += e
150+
left += x
207151
}
208152
return -1
209153
}
210154
```
211155

212-
```go
213-
func pivotIndex(nums []int) int {
214-
l, r := 0, 0
215-
for _, v := range nums {
216-
r += v
217-
}
218-
for i, v := range nums {
219-
r -= v
220-
if l == r {
221-
return i
222-
}
223-
l += v
224-
}
225-
return -1
156+
### **JavaScript**
157+
158+
```js
159+
/**
160+
* @param {number[]} nums
161+
* @return {number}
162+
*/
163+
var pivotIndex = function (nums) {
164+
let left = 0,
165+
right = nums.reduce((a, b) => a + b);
166+
for (let i = 0; i < nums.length; ++i) {
167+
right -= nums[i];
168+
if (left == right) {
169+
return i;
170+
}
171+
left += nums[i];
172+
}
173+
return -1;
174+
};
175+
```
176+
177+
### **TypeScript**
178+
179+
```ts
180+
function pivotIndex(nums: number[]): number {
181+
let left = 0,
182+
right = nums.reduce((a, b) => a + b);
183+
for (let i = 0; i < nums.length; ++i) {
184+
right -= nums[i];
185+
if (left == right) {
186+
return i;
187+
}
188+
left += nums[i];
189+
}
190+
return -1;
226191
}
227192
```
228193

0 commit comments

Comments
 (0)