Skip to content

Commit e65dd3d

Browse files
committedMay 24, 2023
feat: add solutions to lc problem: No.1403
No.1403: Minimum Subsequence in Non-Increasing Order
1 parent b901c6c commit e65dd3d

File tree

7 files changed

+76
-99
lines changed

7 files changed

+76
-99
lines changed
 

‎solution/1400-1499/1403.Minimum Subsequence in Non-Increasing Order/README.md

+28-33
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@
5151

5252
**方法一:排序**
5353

54+
我们可以先对数组 $nums$ 按照从大到小的顺序排序,然后依次从大到小加入数组中的元素,每次加入后判断当前元素之和是否大于剩余元素之和,如果大于则返回当前数组。
55+
56+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组 $nums$ 的长度。
57+
5458
<!-- tabs:start -->
5559

5660
### **Python3**
@@ -60,13 +64,11 @@
6064
```python
6165
class Solution:
6266
def minSubsequence(self, nums: List[int]) -> List[int]:
63-
nums.sort(reverse=True)
64-
s = sum(nums)
6567
ans = []
66-
t = 0
67-
for v in nums:
68-
ans.append(v)
69-
t += v
68+
s, t = sum(nums), 0
69+
for x in sorted(nums, reverse=True):
70+
t += x
71+
ans.append(x)
7072
if t > s - t:
7173
break
7274
return ans
@@ -81,12 +83,9 @@ class Solution {
8183
public List<Integer> minSubsequence(int[] nums) {
8284
Arrays.sort(nums);
8385
List<Integer> ans = new ArrayList<>();
84-
int s = 0;
85-
for (int v : nums) {
86-
s += v;
87-
}
86+
int s = Arrays.stream(nums).sum();
8887
int t = 0;
89-
for (int i = nums.length - 1; i >= 0; --i) {
88+
for (int i = nums.length - 1; i >= 0; i--) {
9089
t += nums[i];
9190
ans.add(nums[i]);
9291
if (t > s - t) {
@@ -104,15 +103,16 @@ class Solution {
104103
class Solution {
105104
public:
106105
vector<int> minSubsequence(vector<int>& nums) {
107-
sort(nums.begin(), nums.end());
108-
int s = 0;
109-
for (int v : nums) s += v;
106+
sort(nums.rbegin(), nums.rend());
107+
int s = accumulate(nums.begin(), nums.end(), 0);
110108
int t = 0;
111109
vector<int> ans;
112-
for (int i = nums.size() - 1; ~i; --i) {
113-
t += nums[i];
114-
ans.push_back(nums[i]);
115-
if (t > s - t) break;
110+
for (int x : nums) {
111+
t += x;
112+
ans.push_back(x);
113+
if (t > s - t) {
114+
break;
115+
}
116116
}
117117
return ans;
118118
}
@@ -122,21 +122,19 @@ public:
122122
### **Go**
123123
124124
```go
125-
func minSubsequence(nums []int) []int {
125+
func minSubsequence(nums []int) (ans []int) {
126126
sort.Ints(nums)
127127
s, t := 0, 0
128-
for _, v := range nums {
129-
s += v
128+
for _, x := range nums {
129+
s += x
130130
}
131-
ans := []int{}
132-
for i := len(nums) - 1; i >= 0; i-- {
131+
for i := len(nums) - 1; ; i-- {
133132
t += nums[i]
134133
ans = append(ans, nums[i])
135134
if t > s-t {
136-
break
135+
return
137136
}
138137
}
139-
return ans
140138
}
141139
```
142140

@@ -145,17 +143,14 @@ func minSubsequence(nums []int) []int {
145143
```ts
146144
function minSubsequence(nums: number[]): number[] {
147145
nums.sort((a, b) => b - a);
148-
const sum = nums.reduce((r, c) => r + c);
149-
const res: number[] = [];
146+
const s = nums.reduce((r, c) => r + c);
150147
let t = 0;
151-
for (const num of nums) {
152-
t += num;
153-
res.push(num);
154-
if (t > sum - t) {
155-
break;
148+
for (let i = 0; ; ++i) {
149+
t += nums[i];
150+
if (t > s - t) {
151+
return nums.slice(0, i + 1);
156152
}
157153
}
158-
return res;
159154
}
160155
```
161156

‎solution/1400-1499/1403.Minimum Subsequence in Non-Increasing Order/README_EN.md

+24-33
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,11 @@
4444
```python
4545
class Solution:
4646
def minSubsequence(self, nums: List[int]) -> List[int]:
47-
nums.sort(reverse=True)
48-
s = sum(nums)
4947
ans = []
50-
t = 0
51-
for v in nums:
52-
ans.append(v)
53-
t += v
48+
s, t = sum(nums), 0
49+
for x in sorted(nums, reverse=True):
50+
t += x
51+
ans.append(x)
5452
if t > s - t:
5553
break
5654
return ans
@@ -63,12 +61,9 @@ class Solution {
6361
public List<Integer> minSubsequence(int[] nums) {
6462
Arrays.sort(nums);
6563
List<Integer> ans = new ArrayList<>();
66-
int s = 0;
67-
for (int v : nums) {
68-
s += v;
69-
}
64+
int s = Arrays.stream(nums).sum();
7065
int t = 0;
71-
for (int i = nums.length - 1; i >= 0; --i) {
66+
for (int i = nums.length - 1; i >= 0; i--) {
7267
t += nums[i];
7368
ans.add(nums[i]);
7469
if (t > s - t) {
@@ -86,15 +81,16 @@ class Solution {
8681
class Solution {
8782
public:
8883
vector<int> minSubsequence(vector<int>& nums) {
89-
sort(nums.begin(), nums.end());
90-
int s = 0;
91-
for (int v : nums) s += v;
84+
sort(nums.rbegin(), nums.rend());
85+
int s = accumulate(nums.begin(), nums.end(), 0);
9286
int t = 0;
9387
vector<int> ans;
94-
for (int i = nums.size() - 1; ~i; --i) {
95-
t += nums[i];
96-
ans.push_back(nums[i]);
97-
if (t > s - t) break;
88+
for (int x : nums) {
89+
t += x;
90+
ans.push_back(x);
91+
if (t > s - t) {
92+
break;
93+
}
9894
}
9995
return ans;
10096
}
@@ -104,21 +100,19 @@ public:
104100
### **Go**
105101
106102
```go
107-
func minSubsequence(nums []int) []int {
103+
func minSubsequence(nums []int) (ans []int) {
108104
sort.Ints(nums)
109105
s, t := 0, 0
110-
for _, v := range nums {
111-
s += v
106+
for _, x := range nums {
107+
s += x
112108
}
113-
ans := []int{}
114-
for i := len(nums) - 1; i >= 0; i-- {
109+
for i := len(nums) - 1; ; i-- {
115110
t += nums[i]
116111
ans = append(ans, nums[i])
117112
if t > s-t {
118-
break
113+
return
119114
}
120115
}
121-
return ans
122116
}
123117
```
124118

@@ -127,17 +121,14 @@ func minSubsequence(nums []int) []int {
127121
```ts
128122
function minSubsequence(nums: number[]): number[] {
129123
nums.sort((a, b) => b - a);
130-
const sum = nums.reduce((r, c) => r + c);
131-
const res: number[] = [];
124+
const s = nums.reduce((r, c) => r + c);
132125
let t = 0;
133-
for (const num of nums) {
134-
t += num;
135-
res.push(num);
136-
if (t > sum - t) {
137-
break;
126+
for (let i = 0; ; ++i) {
127+
t += nums[i];
128+
if (t > s - t) {
129+
return nums.slice(0, i + 1);
138130
}
139131
}
140-
return res;
141132
}
142133
```
143134

‎solution/1400-1499/1403.Minimum Subsequence in Non-Increasing Order/Solution.cpp

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
class Solution {
22
public:
33
vector<int> minSubsequence(vector<int>& nums) {
4-
sort(nums.begin(), nums.end());
5-
int s = 0;
6-
for (int v : nums) s += v;
4+
sort(nums.rbegin(), nums.rend());
5+
int s = accumulate(nums.begin(), nums.end(), 0);
76
int t = 0;
87
vector<int> ans;
9-
for (int i = nums.size() - 1; ~i; --i) {
10-
t += nums[i];
11-
ans.push_back(nums[i]);
12-
if (t > s - t) break;
8+
for (int x : nums) {
9+
t += x;
10+
ans.push_back(x);
11+
if (t > s - t) {
12+
break;
13+
}
1314
}
1415
return ans;
1516
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
1-
func minSubsequence(nums []int) []int {
1+
func minSubsequence(nums []int) (ans []int) {
22
sort.Ints(nums)
33
s, t := 0, 0
4-
for _, v := range nums {
5-
s += v
4+
for _, x := range nums {
5+
s += x
66
}
7-
ans := []int{}
8-
for i := len(nums) - 1; i >= 0; i-- {
7+
for i := len(nums) - 1; ; i-- {
98
t += nums[i]
109
ans = append(ans, nums[i])
1110
if t > s-t {
12-
break
11+
return
1312
}
1413
}
15-
return ans
1614
}

‎solution/1400-1499/1403.Minimum Subsequence in Non-Increasing Order/Solution.java

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,9 @@ class Solution {
22
public List<Integer> minSubsequence(int[] nums) {
33
Arrays.sort(nums);
44
List<Integer> ans = new ArrayList<>();
5-
int s = 0;
6-
for (int v : nums) {
7-
s += v;
8-
}
5+
int s = Arrays.stream(nums).sum();
96
int t = 0;
10-
for (int i = nums.length - 1; i >= 0; --i) {
7+
for (int i = nums.length - 1; i >= 0; i--) {
118
t += nums[i];
129
ans.add(nums[i]);
1310
if (t > s - t) {
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
class Solution:
22
def minSubsequence(self, nums: List[int]) -> List[int]:
3-
nums.sort(reverse=True)
4-
s = sum(nums)
53
ans = []
6-
t = 0
7-
for v in nums:
8-
ans.append(v)
9-
t += v
4+
s, t = sum(nums), 0
5+
for x in sorted(nums, reverse=True):
6+
t += x
7+
ans.append(x)
108
if t > s - t:
119
break
1210
return ans
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
11
function minSubsequence(nums: number[]): number[] {
22
nums.sort((a, b) => b - a);
3-
const sum = nums.reduce((r, c) => r + c);
4-
const res: number[] = [];
3+
const s = nums.reduce((r, c) => r + c);
54
let t = 0;
6-
for (const num of nums) {
7-
t += num;
8-
res.push(num);
9-
if (t > sum - t) {
10-
break;
5+
for (let i = 0; ; ++i) {
6+
t += nums[i];
7+
if (t > s - t) {
8+
return nums.slice(0, i + 1);
119
}
1210
}
13-
return res;
1411
}

0 commit comments

Comments
 (0)