1403 非遞增順序的最小子序列(分析)

2021-10-05 09:49:32 字數 1140 閱讀 9282

1. 問題描述:

給你乙個陣列 nums,請你從中抽取乙個子串行,滿足該子串行的元素之和嚴格大於未包含在該子串行中的各元素之和。

如果存在多個解決方案,只需返回 長度最小 的子串行。如果仍然有多個解決方案,則返回 元素之和最大 的子串行。

與子陣列不同的地方在於,「陣列的子串行」不強調元素在原陣列中的連續性,也就是說,它可以通過從陣列中分離一些(也可能不分離)元素得到。

注意,題目資料保證滿足所有約束條件的解決方案是 唯一 的。同時,返回的答案應當按 非遞增順序 排列。

示例 1:

輸入:nums = [4,3,10,9,8]

輸出:[10,9] 

解釋:子串行 [10,9] 和 [10,8] 是最小的、滿足元素之和大於其他各元素之和的子串行。但是 [10,9] 的元素之和最大。 

示例 2:

輸入:nums = [4,4,7,6,7]

輸出:[7,7,6] 

解釋:子串行 [7,7] 的和為 14 ,不嚴格大於剩下的其他元素之和(14 = 4 + 4 + 6)。因此,[7,6,7] 是滿足題意的最小子序列。注意,元素按非遞增順序返回。  

示例 3:

輸入:nums = [6]

輸出:[6]

1 <= nums.length <= 500

1 <= nums[i] <= 100

2. 思路分析:

其實這道題目假如想出來還是很簡單的,不必要想得太複雜,因為我們是要求解出拿出來的元素之和大於剩下來的元素之和,所以我們可以先遍歷一遍元素將所有元素加起來,然後對陣列進行排序,先踢掉最大的元素,然後累加的和減去踢掉的這個元素(有點像大圈中踢掉某些元素),判斷兩者之和的大小關係,假如滿足條件那麼直接break了說明找到了所有符合條件的數字了,沒有滿足迴圈繼續踢大的元素,先踢掉最大的有點貪心的意思

3. **如下:

class solution 

arrays.sort(nums);

int index = nums.length - 1;

int cur = 0;

while (true)

return res;

}}

1403 非遞增順序的最小子序列

給你乙個陣列nums,請你從中抽取乙個子串行,滿足該子串行的元素之和嚴格大於未包含在該子串行中的各元素之和。如果存在多個解決方案,只需返回長度最小的子串行。如果仍然有多個解決方案,則返回元素之和最大的子串行。與子陣列不同的地方在於,陣列的子串行 不強調元素在原陣列中的連續性,也就是說,它可以通過從陣...

1403 非遞增順序的最小子序列

題目描述 給你乙個陣列 nums,請你從中抽取乙個子串行,滿足該子串行的元素之和 嚴格 大於未包含在該子串行中的各元素之和。如果存在多個解決方案,只需返回 長度最小 的子串行。如果仍然有多個解決方案,則返回 元素之和最大 的子串行。與子陣列不同的地方在於,陣列的子串行 不強調元素在原陣列中的連續性,...

1403 非遞增順序的最小子序列

給你乙個陣列 nums,請你從中抽取乙個子串行,滿足該子串行的元素之和 嚴格 大於未包含在該子串行中的各元素之和。如果存在多個解決方案,只需返回 長度最小 的子串行。如果仍然有多個解決方案,則返回 元素之和最大 的子串行。與子陣列不同的地方在於,陣列的子串行 不強調元素在原陣列中的連續性,也就是說,...