Skip to content

Commit 5695338

Browse files
committed
feat: add solutions to lc problems: No.1800,1801
* No.1800.Maximum Ascending Subarray Sum * No.1801.Number of Orders in the Backlog
1 parent 385b906 commit 5695338

File tree

21 files changed

+757
-188
lines changed

21 files changed

+757
-188
lines changed

solution/0200-0299/0232.Implement Queue using Stacks/README_EN.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,21 @@ class MyQueue {
103103
public MyQueue() {
104104

105105
}
106-
106+
107107
public void push(int x) {
108108
stk1.push(x);
109109
}
110-
110+
111111
public int pop() {
112112
move();
113113
return stk2.pop();
114114
}
115-
115+
116116
public int peek() {
117117
move();
118118
return stk2.peek();
119119
}
120-
120+
121121
public boolean empty() {
122122
return stk1.isEmpty() && stk2.isEmpty();
123123
}

solution/0200-0299/0244.Shortest Word Distance II/README_EN.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class WordDistance {
8383
d.computeIfAbsent(wordsDict[i], k -> new ArrayList<>()).add(i);
8484
}
8585
}
86-
86+
8787
public int shortest(String word1, String word2) {
8888
List<Integer> a = d.get(word1), b = d.get(word2);
8989
int ans = 0x3f3f3f3f;
@@ -117,7 +117,7 @@ public:
117117
d[wordsDict[i]].push_back(i);
118118
}
119119
}
120-
120+
121121
int shortest(string word1, string word2) {
122122
auto a = d[word1], b = d[word2];
123123
int i = 0, j = 0;

solution/0700-0799/0775.Global and Local Inversions/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@
4242
<strong>解释:</strong>有 2 个全局倒置,和 1 个局部倒置。
4343
</pre>
4444

45-
46-
4745
<p><strong>提示:</strong></p>
4846

4947
<ul>

solution/1600-1699/1611.Minimum One Bit Operations to Make Integers Zero/Solution.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ def minimumOneBitOperations(self, n: int) -> int:
66
if (n >> i) == 1:
77
base = 1 << i
88
break
9-
return 2*base-1 - self.minimumOneBitOperations(n-base)
9+
return 2 * base - 1 - self.minimumOneBitOperations(n - base)

solution/1800-1899/1800.Maximum Ascending Subarray Sum/README.md

+60-56
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,18 @@
5858

5959
<!-- 这里可写通用的实现逻辑 -->
6060

61+
**方法一:直接模拟**
62+
63+
我们用变量 `t` 记录当前升序子数组的和,用变量 `ans` 记录最大的升序子数组和。
64+
65+
遍历数组 `nums`
66+
67+
如果当前元素是数组的第一个元素,或者当前元素大于前一个元素,那么将当前元素加入到当前升序子数组的和,即 `t += nums[i]`,并且更新最大升序子数组和 `ans = max(ans, t)`;否则,当前元素不满足升序子数组的条件,那么将当前升序子数组的和 `t` 重置为当前元素,即 `t = nums[i]`
68+
69+
遍历结束,返回最大升序子数组和 `ans`
70+
71+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为数组 `nums` 的长度。
72+
6173
<!-- tabs:start -->
6274

6375
### **Python3**
@@ -67,15 +79,14 @@
6779
```python
6880
class Solution:
6981
def maxAscendingSum(self, nums: List[int]) -> int:
70-
res, cur = 0, nums[0]
71-
for i in range(1, len(nums)):
72-
if nums[i] > nums[i - 1]:
73-
cur += nums[i]
82+
ans = t = 0
83+
for i, v in enumerate(nums):
84+
if i == 0 or v > nums[i - 1]:
85+
t += v
86+
ans = max(ans, t)
7487
else:
75-
res = max(res, cur)
76-
cur = nums[i]
77-
res = max(res, cur)
78-
return res
88+
t = v
89+
return ans
7990
```
8091

8192
### **Java**
@@ -85,58 +96,36 @@ class Solution:
8596
```java
8697
class Solution {
8798
public int maxAscendingSum(int[] nums) {
88-
int cur = nums[0];
89-
int res = 0;
90-
for (int i = 1; i < nums.length; ++i) {
91-
if (nums[i] > nums[i - 1]) {
92-
cur += nums[i];
99+
int ans = 0, t = 0;
100+
for (int i = 0; i < nums.length; ++i) {
101+
if (i == 0 || nums[i] > nums[i - 1]) {
102+
t += nums[i];
103+
ans = Math.max(ans, t);
93104
} else {
94-
res = Math.max(res, cur);
95-
cur = nums[i];
105+
t = nums[i];
96106
}
97107
}
98-
res = Math.max(res, cur);
99-
return res;
108+
return ans;
100109
}
101110
}
102111
```
103112

104-
### **TypeScript**
105-
106-
```ts
107-
function maxAscendingSum(nums: number[]): number {
108-
let res = 0,
109-
sum = nums[0];
110-
for (let i = 1; i < nums.length; ++i) {
111-
if (nums[i] > nums[i - 1]) {
112-
sum += nums[i];
113-
} else {
114-
res = Math.max(res, sum);
115-
sum = nums[i];
116-
}
117-
}
118-
res = Math.max(res, sum);
119-
return res;
120-
}
121-
```
122-
123113
### **C++**
124114

125115
```cpp
126116
class Solution {
127117
public:
128118
int maxAscendingSum(vector<int>& nums) {
129-
int res = 0, cur = nums[0];
130-
for (int i = 1; i < nums.size(); ++i) {
131-
if (nums[i] > nums[i - 1]) {
132-
cur += nums[i];
119+
int ans = 0, t = 0;
120+
for (int i = 0; i < nums.size(); ++i) {
121+
if (i == 0 || nums[i] > nums[i - 1]) {
122+
t += nums[i];
123+
ans = max(ans, t);
133124
} else {
134-
res = max(res, cur);
135-
cur = nums[i];
125+
t = nums[i];
136126
}
137127
}
138-
res = max(res, cur);
139-
return res;
128+
return ans;
140129
}
141130
};
142131
```
@@ -145,21 +134,36 @@ public:
145134
146135
```go
147136
func maxAscendingSum(nums []int) int {
148-
res, cur := 0, nums[0]
149-
for i := 1; i < len(nums); i++ {
150-
if nums[i] > nums[i-1] {
151-
cur += nums[i]
152-
} else {
153-
if res < cur {
154-
res = cur
137+
ans, t := 0, 0
138+
for i, v := range nums {
139+
if i == 0 || v > nums[i-1] {
140+
t += v
141+
if ans < t {
142+
ans = t
155143
}
156-
cur = nums[i]
144+
} else {
145+
t = v
157146
}
158147
}
159-
if res < cur {
160-
res = cur
161-
}
162-
return res
148+
return ans
149+
}
150+
```
151+
152+
### **TypeScript**
153+
154+
```ts
155+
function maxAscendingSum(nums: number[]): number {
156+
let ans = 0;
157+
let t = 0;
158+
for (let i = 0; i < nums.length; ++i) {
159+
if (i == 0 || nums[i] > nums[i - 1]) {
160+
t += nums[i];
161+
ans = Math.max(ans, t);
162+
} else {
163+
t = nums[i];
164+
}
165+
}
166+
return ans;
163167
}
164168
```
165169

solution/1800-1899/1800.Maximum Ascending Subarray Sum/README_EN.md

+48-56
Original file line numberDiff line numberDiff line change
@@ -52,74 +52,51 @@
5252
```python
5353
class Solution:
5454
def maxAscendingSum(self, nums: List[int]) -> int:
55-
res, cur = 0, nums[0]
56-
for i in range(1, len(nums)):
57-
if nums[i] > nums[i - 1]:
58-
cur += nums[i]
55+
ans = t = 0
56+
for i, v in enumerate(nums):
57+
if i == 0 or v > nums[i - 1]:
58+
t += v
59+
ans = max(ans, t)
5960
else:
60-
res = max(res, cur)
61-
cur = nums[i]
62-
res = max(res, cur)
63-
return res
61+
t = v
62+
return ans
6463
```
6564

6665
### **Java**
6766

6867
```java
6968
class Solution {
7069
public int maxAscendingSum(int[] nums) {
71-
int cur = nums[0];
72-
int res = 0;
73-
for (int i = 1; i < nums.length; ++i) {
74-
if (nums[i] > nums[i - 1]) {
75-
cur += nums[i];
70+
int ans = 0, t = 0;
71+
for (int i = 0; i < nums.length; ++i) {
72+
if (i == 0 || nums[i] > nums[i - 1]) {
73+
t += nums[i];
74+
ans = Math.max(ans, t);
7675
} else {
77-
res = Math.max(res, cur);
78-
cur = nums[i];
76+
t = nums[i];
7977
}
8078
}
81-
res = Math.max(res, cur);
82-
return res;
79+
return ans;
8380
}
8481
}
8582
```
8683

87-
### **TypeScript**
88-
89-
```ts
90-
function maxAscendingSum(nums: number[]): number {
91-
let res = 0,
92-
sum = nums[0];
93-
for (let i = 1; i < nums.length; ++i) {
94-
if (nums[i] > nums[i - 1]) {
95-
sum += nums[i];
96-
} else {
97-
res = Math.max(res, sum);
98-
sum = nums[i];
99-
}
100-
}
101-
res = Math.max(res, sum);
102-
return res;
103-
}
104-
```
105-
10684
### **C++**
10785

10886
```cpp
10987
class Solution {
11088
public:
11189
int maxAscendingSum(vector<int>& nums) {
112-
int res = 0, cur = nums[0];
113-
for (int i = 1; i < nums.size(); ++i) {
114-
if (nums[i] > nums[i - 1]) {
115-
cur += nums[i];
90+
int ans = 0, t = 0;
91+
for (int i = 0; i < nums.size(); ++i) {
92+
if (i == 0 || nums[i] > nums[i - 1]) {
93+
t += nums[i];
94+
ans = max(ans, t);
11695
} else {
117-
res = max(res, cur);
118-
cur = nums[i];
96+
t = nums[i];
11997
}
12098
}
121-
res = max(res, cur);
122-
return res;
99+
return ans;
123100
}
124101
};
125102
```
@@ -128,21 +105,36 @@ public:
128105
129106
```go
130107
func maxAscendingSum(nums []int) int {
131-
res, cur := 0, nums[0]
132-
for i := 1; i < len(nums); i++ {
133-
if nums[i] > nums[i-1] {
134-
cur += nums[i]
135-
} else {
136-
if res < cur {
137-
res = cur
108+
ans, t := 0, 0
109+
for i, v := range nums {
110+
if i == 0 || v > nums[i-1] {
111+
t += v
112+
if ans < t {
113+
ans = t
138114
}
139-
cur = nums[i]
115+
} else {
116+
t = v
140117
}
141118
}
142-
if res < cur {
143-
res = cur
144-
}
145-
return res
119+
return ans
120+
}
121+
```
122+
123+
### **TypeScript**
124+
125+
```ts
126+
function maxAscendingSum(nums: number[]): number {
127+
let ans = 0;
128+
let t = 0;
129+
for (let i = 0; i < nums.length; ++i) {
130+
if (i == 0 || nums[i] > nums[i - 1]) {
131+
t += nums[i];
132+
ans = Math.max(ans, t);
133+
} else {
134+
t = nums[i];
135+
}
136+
}
137+
return ans;
146138
}
147139
```
148140

Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
class Solution {
22
public:
33
int maxAscendingSum(vector<int>& nums) {
4-
int res = 0, cur = nums[0];
5-
for (int i = 1; i < nums.size(); ++i) {
6-
if (nums[i] > nums[i - 1]) {
7-
cur += nums[i];
4+
int ans = 0, t = 0;
5+
for (int i = 0; i < nums.size(); ++i) {
6+
if (i == 0 || nums[i] > nums[i - 1]) {
7+
t += nums[i];
8+
ans = max(ans, t);
89
} else {
9-
res = max(res, cur);
10-
cur = nums[i];
10+
t = nums[i];
1111
}
1212
}
13-
res = max(res, cur);
14-
return res;
13+
return ans;
1514
}
1615
};

0 commit comments

Comments
 (0)