51
51
52
52
** 方法一:排序**
53
53
54
+ 我们可以先对数组 $nums$ 按照从大到小的顺序排序,然后依次从大到小加入数组中的元素,每次加入后判断当前元素之和是否大于剩余元素之和,如果大于则返回当前数组。
55
+
56
+ 时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组 $nums$ 的长度。
57
+
54
58
<!-- tabs:start -->
55
59
56
60
### ** Python3**
60
64
``` python
61
65
class Solution :
62
66
def minSubsequence (self , nums : List[int ]) -> List[int ]:
63
- nums.sort(reverse = True )
64
- s = sum (nums)
65
67
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)
70
72
if t > s - t:
71
73
break
72
74
return ans
@@ -81,12 +83,9 @@ class Solution {
81
83
public List<Integer > minSubsequence (int [] nums ) {
82
84
Arrays . sort(nums);
83
85
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();
88
87
int t = 0 ;
89
- for (int i = nums. length - 1 ; i >= 0 ; -- i ) {
88
+ for (int i = nums. length - 1 ; i >= 0 ; i -- ) {
90
89
t += nums[i];
91
90
ans. add(nums[i]);
92
91
if (t > s - t) {
@@ -104,15 +103,16 @@ class Solution {
104
103
class Solution {
105
104
public:
106
105
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);
110
108
int t = 0;
111
109
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
+ }
116
116
}
117
117
return ans;
118
118
}
@@ -122,21 +122,19 @@ public:
122
122
### **Go**
123
123
124
124
```go
125
- func minSubsequence(nums []int) []int {
125
+ func minSubsequence(nums []int) (ans []int) {
126
126
sort.Ints(nums)
127
127
s, t := 0, 0
128
- for _, v := range nums {
129
- s += v
128
+ for _, x := range nums {
129
+ s += x
130
130
}
131
- ans := []int{}
132
- for i := len(nums) - 1; i >= 0; i-- {
131
+ for i := len(nums) - 1; ; i-- {
133
132
t += nums[i]
134
133
ans = append(ans, nums[i])
135
134
if t > s-t {
136
- break
135
+ return
137
136
}
138
137
}
139
- return ans
140
138
}
141
139
```
142
140
@@ -145,17 +143,14 @@ func minSubsequence(nums []int) []int {
145
143
``` ts
146
144
function minSubsequence(nums : number []): number [] {
147
145
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 );
150
147
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 );
156
152
}
157
153
}
158
- return res ;
159
154
}
160
155
```
161
156
0 commit comments