題目連結(jié):
題目意譯:
給定陣列 nums,從該陣列中獲取一個子序列使得其元素總和嚴(yán)格大於沒有包含於該子序列中的元素總和。
如果有多組解,則回傳長度最小的子序列。而如果仍有多組解則回傳元素總和最大者。一陣列的一個子序列可以藉由從陣列中移除若干個(可能無)元素而得到。
注意到,符合限制條件的答案保證唯一。還有,請將答案按非升序排列後回傳。
限制:
1 ≦ nums.length ≦ 500
1 ≦ nums[i] ≦ 100
範(fàn)例測資:
範(fàn)例 1:
輸入: nums = [4,3,10,9,8]
輸出: [10,9]
解釋: 子序列 [10,9] 和 [10,8] 長度都最小且各自滿足它們的元素總和嚴(yán)格大於沒有包含於其中的元素總和。不過子序列 [10,9] 有著最大的元素總和。
範(fàn)例 2:
輸入: nums = [4,4,7,6,7]
輸出: [7,7,6]
解釋: 子序列 [7,7] 有著元素總和值 14,其並沒有嚴(yán)格大於未包含於其中的元素總和(14 = 4 + 4 + 6)。因此,子序列 [7,6,7] 是長度最小且滿足此條件的。注意到子序列應(yīng)按非升序排列才回傳(譯者注:原文在這邊寫成了「non-decreasing」(非降序),其應(yīng)為非升序才對)。
解題思維:
先將 nums 中的數(shù)字由大排到小(因此 nums[0] 現(xiàn)在是 nums 中的最大值),並令 total = nums 中元素總和。
令 i = 0 且 sums = 0,接著重複以下步驟直到 sums > total 為止:
sums 加上 nums[i](代表我們要該元素在子序列中)、
total 減去 nums[i](計算剩餘元素的總和)、
將 i 加 1(代表要往下一個、比較小一點的元素看)。
當(dāng)上述過程停止時,可以看到排序後 nums 的前 i 個元素即是所求子序列(其滿足總和 > 剩餘元素總和且其總和是所有最短子序列中的最大者(因為我們從數(shù)字大的開始挑))。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。