Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit cbbb894

Browse files
acbinyanglbme
andauthored
feat: add solutions to lc problems: No.3024~3027 (doocs#2314)
Co-authored-by: yanglbme <szuyanglb@outlook.com>
1 parent 5d2197d commit cbbb894

File tree

17 files changed

+461
-217
lines changed

17 files changed

+461
-217
lines changed

‎solution/3000-3099/3024.Type of Triangle II/README.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,24 @@ function triangleType(nums: number[]): string {
145145
}
146146
```
147147

148+
```cs
149+
public class Solution {
150+
public string TriangleType(int[] nums) {
151+
Array.Sort(nums);
152+
if (nums[0] + nums[1] <= nums[2]) {
153+
return "none";
154+
}
155+
if (nums[0] == nums[2]) {
156+
return "equilateral";
157+
}
158+
if (nums[0] == nums[1] || nums[1] == nums[2]) {
159+
return "isosceles";
160+
}
161+
return "scalene";
162+
}
163+
}
164+
```
165+
148166
<!-- tabs:end -->
149167

150168
<!-- end -->

‎solution/3000-3099/3024.Type of Triangle II/README_EN.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,24 @@ function triangleType(nums: number[]): string {
141141
}
142142
```
143143

144+
```cs
145+
public class Solution {
146+
public string TriangleType(int[] nums) {
147+
Array.Sort(nums);
148+
if (nums[0] + nums[1] <= nums[2]) {
149+
return "none";
150+
}
151+
if (nums[0] == nums[2]) {
152+
return "equilateral";
153+
}
154+
if (nums[0] == nums[1] || nums[1] == nums[2]) {
155+
return "isosceles";
156+
}
157+
return "scalene";
158+
}
159+
}
160+
```
161+
144162
<!-- tabs:end -->
145163

146164
<!-- end -->
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
public class Solution {
2+
public string TriangleType(int[] nums) {
3+
Array.Sort(nums);
4+
if (nums[0] + nums[1] <= nums[2]) {
5+
return "none";
6+
}
7+
if (nums[0] == nums[2]) {
8+
return "equilateral";
9+
}
10+
if (nums[0] == nums[1] || nums[1] == nums[2]) {
11+
return "isosceles";
12+
}
13+
return "scalene";
14+
}
15+
}

‎solution/3000-3099/3025.Find the Number of Ways to Place People I/README.md‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,29 @@ function numberOfPairs(points: number[][]): number {
189189
}
190190
```
191191

192+
```cs
193+
public class Solution {
194+
public int NumberOfPairs(int[][] points) {
195+
Array.Sort(points, (a, b) => a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]);
196+
int ans = 0;
197+
int n = points.Length;
198+
int inf = 1 << 30;
199+
for (int i = 0; i < n; ++i) {
200+
int y1 = points[i][1];
201+
int maxY = -inf;
202+
for (int j = i + 1; j < n; ++j) {
203+
int y2 = points[j][1];
204+
if (maxY < y2 && y2 <= y1) {
205+
maxY = y2;
206+
++ans;
207+
}
208+
}
209+
}
210+
return ans;
211+
}
212+
}
213+
```
214+
192215
<!-- tabs:end -->
193216

194217
<!-- end -->

‎solution/3000-3099/3025.Find the Number of Ways to Place People I/README_EN.md‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,29 @@ function numberOfPairs(points: number[][]): number {
178178
}
179179
```
180180

181+
```cs
182+
public class Solution {
183+
public int NumberOfPairs(int[][] points) {
184+
Array.Sort(points, (a, b) => a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]);
185+
int ans = 0;
186+
int n = points.Length;
187+
int inf = 1 << 30;
188+
for (int i = 0; i < n; ++i) {
189+
int y1 = points[i][1];
190+
int maxY = -inf;
191+
for (int j = i + 1; j < n; ++j) {
192+
int y2 = points[j][1];
193+
if (maxY < y2 && y2 <= y1) {
194+
maxY = y2;
195+
++ans;
196+
}
197+
}
198+
}
199+
return ans;
200+
}
201+
}
202+
```
203+
181204
<!-- tabs:end -->
182205

183206
<!-- end -->
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
public class Solution {
2+
public int NumberOfPairs(int[][] points) {
3+
Array.Sort(points, (a, b) => a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]);
4+
int ans = 0;
5+
int n = points.Length;
6+
int inf = 1 << 30;
7+
for (int i = 0; i < n; ++i) {
8+
int y1 = points[i][1];
9+
int maxY = -inf;
10+
for (int j = i + 1; j < n; ++j) {
11+
int y2 = points[j][1];
12+
if (maxY < y2 && y2 <= y1) {
13+
maxY = y2;
14+
++ans;
15+
}
16+
}
17+
}
18+
return ans;
19+
}
20+
}

‎solution/3000-3099/3026.Maximum Good Subarray Sum/README.md‎

Lines changed: 96 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -50,53 +50,56 @@
5050

5151
## 解法
5252

53-
### 方法一
53+
### 方法一:前缀和 + 哈希表
54+
55+
我们用一个哈希表 $p$ 记录 $nums[i]$ 的前缀数组 $nums[0..i-1]$ 的和 $s,ドル如果有多个相同的 $nums[i],ドル我们只保留最小的 $s$。初始时,我们将 $p[nums[0]]$ 设为 0ドル$。另外,我们用一个变量 $s$ 记录当前的前缀和,初始时 $s = 0$。初始化答案 $ans$ 为 $-\infty$。
56+
57+
接下来,我们枚举 $nums[i],ドル并且维护一个变量 $s$ 表示 $nums[0..i]$ 的和。如果 $nums[i] - k$ 在 $p$ 中,那么我们就找到了一个好子数组,将答案更新为 $ans = \max(ans, s - p[nums[i] - k])$。同理,如果 $nums[i] + k$ 在 $p$ 中,那么我们也找到了一个好子数组,将答案更新为 $ans = \max(ans, s - p[nums[i] + k])$。然后,如果 $i + 1 \lt n$ 并且 $nums[i + 1]$ 不在 $p$ 中,或者 $p[nums[i + 1]] \gt s,ドル我们就将 $p[nums[i + 1]]$ 设为 $s$。
58+
59+
最后,如果 $ans = -\infty,ドル那么我们返回 0ドル,ドル否则返回 $ans$。
60+
61+
时间复杂度 $O(n),ドル空间复杂度 $O(n)$。其中 $n$ 是数组的长度。
5462

5563
<!-- tabs:start -->
5664

5765
```python
5866
class Solution:
5967
def maximumSubarraySum(self, nums: List[int], k: int) -> int:
60-
p = {}
61-
r = float('-inf')
62-
p[nums[0]] = 0
63-
s = 0
64-
n = len(nums)
65-
for i in range(n):
66-
s += nums[i]
67-
if nums[i] - k in p:
68-
r = max(r, s - p[nums[i] - k])
69-
if nums[i] + k in p:
70-
r = max(r, s - p[nums[i] + k])
71-
if i + 1 == n:
72-
break
73-
if nums[i + 1] not in p or p[nums[i + 1]] > s:
68+
ans = -inf
69+
p = {nums[0]: 0}
70+
s, n = 0, len(nums)
71+
for i, x in enumerate(nums):
72+
s += x
73+
if x - k in p:
74+
ans = max(ans, s - p[x - k])
75+
if x + k in p:
76+
ans = max(ans, s - p[x + k])
77+
if i + 1 < n and (nums[i + 1] not in p or p[nums[i + 1]] > s):
7478
p[nums[i + 1]] = s
75-
return r if r !=float('-inf') else 0
79+
return 0 if ans ==-inf else ans
7680
```
7781

7882
```java
7983
class Solution {
8084
public long maximumSubarraySum(int[] nums, int k) {
81-
HashMap<Integer, Long> p = new HashMap<>();
82-
long r = Long.MIN_VALUE;
85+
Map<Integer, Long> p = new HashMap<>();
8386
p.put(nums[0], 0L);
8487
long s = 0;
8588
int n = nums.length;
86-
for (int i = 0;; ++i) {
89+
long ans = Long.MIN_VALUE;
90+
for (int i = 0; i < n; ++i) {
8791
s += nums[i];
8892
if (p.containsKey(nums[i] - k)) {
89-
r = Math.max(r, s - p.get(nums[i] - k));
93+
ans = Math.max(ans, s - p.get(nums[i] - k));
9094
}
9195
if (p.containsKey(nums[i] + k)) {
92-
r = Math.max(r, s - p.get(nums[i] + k));
96+
ans = Math.max(ans, s - p.get(nums[i] + k));
9397
}
94-
if (i + 1 == n) break;
95-
if (!p.containsKey(nums[i + 1]) || p.get(nums[i + 1]) > s) {
98+
if (i + 1 < n && (!p.containsKey(nums[i + 1]) || p.get(nums[i + 1]) > s)) {
9699
p.put(nums[i + 1], s);
97100
}
98101
}
99-
return r == Long.MIN_VALUE ? 0 : r;
102+
return ans == Long.MIN_VALUE ? 0 : ans;
100103
}
101104
}
102105
```
@@ -106,85 +109,106 @@ class Solution {
106109
public:
107110
long long maximumSubarraySum(vector<int>& nums, int k) {
108111
unordered_map<int, long long> p;
109-
long long r = LONG_LONG_MIN;
110112
p[nums[0]] = 0;
111113
long long s = 0;
112114
const int n = nums.size();
115+
long long ans = LONG_LONG_MIN;
113116
for (int i = 0;; ++i) {
114117
s += nums[i];
115-
auto t = p.find(nums[i] - k);
116-
if (t != p.end()) {
117-
r = max(r, s - t->second);
118+
auto it = p.find(nums[i] - k);
119+
if (it != p.end()) {
120+
ans = max(ans, s - it->second);
121+
}
122+
it = p.find(nums[i] + k);
123+
if (it != p.end()) {
124+
ans = max(ans, s - it->second);
118125
}
119-
t = p.find(nums[i] + k);
120-
if (t != p.end()) {
121-
r = max(r, s - t->second);
126+
if (i + 1 == n) {
127+
break;
122128
}
123-
if (i + 1 == n)
124-
break;
125-
t = p.find(nums[i + 1]);
126-
if (t == p.end() || t->second > s) {
129+
it = p.find(nums[i + 1]);
130+
if (it == p.end() || it->second > s) {
127131
p[nums[i + 1]] = s;
128132
}
129133
}
130-
return r == LONG_LONG_MIN ? 0 : r;
134+
return ans == LONG_LONG_MIN ? 0 : ans;
131135
}
132136
};
133137
```
134138
135139
```go
136140
func maximumSubarraySum(nums []int, k int) int64 {
137-
p := make(map[int]int64)
138-
var r int64 = math.MinInt64
139-
p[nums[0]] = 0
140-
var s int64 = 0
141-
n := len(nums)
142-
for i := 0; ; i++ {
143-
s += int64(nums[i])
144-
if t, ok := p[nums[i]-k]; ok {
145-
r = max(r, s-t)
146-
}
147-
if t, ok := p[nums[i]+k]; ok {
148-
r = max(r, s-t)
149-
}
150-
if i+1 == n {
151-
break
152-
}
153-
if t, ok := p[nums[i+1]]; !ok || t > s {
154-
p[nums[i+1]] = s
155-
}
156-
}
157-
if r == math.MinInt64 {
158-
return 0
159-
}
160-
return r
141+
p := map[int]int64{nums[0]: 0}
142+
var s int64 = 0
143+
n := len(nums)
144+
var ans int64 = math.MinInt64
145+
for i, x := range nums {
146+
s += int64(x)
147+
if t, ok := p[nums[i]-k]; ok {
148+
ans = max(ans, s-t)
149+
}
150+
if t, ok := p[nums[i]+k]; ok {
151+
ans = max(ans, s-t)
152+
}
153+
if i+1 == n {
154+
break
155+
}
156+
if t, ok := p[nums[i+1]]; !ok || s < t {
157+
p[nums[i+1]] = s
158+
}
159+
}
160+
if ans == math.MinInt64 {
161+
return 0
162+
}
163+
return ans
161164
}
162165
```
163166

164167
```ts
165168
function maximumSubarraySum(nums: number[], k: number): number {
166169
const p: Map<number, number> = new Map();
167-
let r: number = Number.MIN_SAFE_INTEGER;
168170
p.set(nums[0], 0);
171+
let ans: number = -Infinity;
169172
let s: number = 0;
170173
const n: number = nums.length;
171-
for (let i = 0; ; ++i) {
174+
for (let i = 0; i<n; ++i) {
172175
s += nums[i];
173-
let t: number | undefined = p.get(nums[i] - k);
174-
if (t !== undefined) {
175-
r = Math.max(r, s - t);
176+
if (p.has(nums[i] - k)) {
177+
ans = Math.max(ans, s - p.get(nums[i] - k)!);
176178
}
177-
t = p.get(nums[i] + k);
178-
if (t !== undefined) {
179-
r = Math.max(r, s - t);
179+
if (p.has(nums[i] + k)) {
180+
ans = Math.max(ans, s - p.get(nums[i] + k)!);
180181
}
181-
if (i + 1 === n) break;
182-
t = p.get(nums[i + 1]);
183-
if (t === undefined || t > s) {
182+
if (i + 1 < n && (!p.has(nums[i + 1]) || p.get(nums[i + 1])! > s)) {
184183
p.set(nums[i + 1], s);
185184
}
186185
}
187-
return r === Number.MIN_SAFE_INTEGER ? 0 : r;
186+
return ans === -Infinity ? 0 : ans;
187+
}
188+
```
189+
190+
```cs
191+
public class Solution {
192+
public long MaximumSubarraySum(int[] nums, int k) {
193+
Dictionary<int, long> p = new Dictionary<int, long>();
194+
p[nums[0]] = 0L;
195+
long s = 0;
196+
int n = nums.Length;
197+
long ans = long.MinValue;
198+
for (int i = 0; i < n; ++i) {
199+
s += nums[i];
200+
if (p.ContainsKey(nums[i] - k)) {
201+
ans = Math.Max(ans, s - p[nums[i] - k]);
202+
}
203+
if (p.ContainsKey(nums[i] + k)) {
204+
ans = Math.Max(ans, s - p[nums[i] + k]);
205+
}
206+
if (i + 1 < n && (!p.ContainsKey(nums[i + 1]) || p[nums[i + 1]] > s)) {
207+
p[nums[i + 1]] = s;
208+
}
209+
}
210+
return ans == long.MinValue ? 0 : ans;
211+
}
188212
}
189213
```
190214

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /