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

2021-10-09 22:30:00 字數 1327 閱讀 5671

題目描述:

給你乙個陣列 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

方法1:

主要思路:

(1)對原陣列進行排序,然後對排序後的陣列從後向前遍歷,計算各個元素之和,直到該元素之和的2倍大於總的元素之和時,跳出迴圈即可;

class

solution

vector<

int> res;

int counts=0;

//統計累計的和

//所有元素之和

int sum_nums=

accumulate

(nums.

begin()

,nums.

end(),

0);sort

(nums.

begin()

,nums.

end())

;//排序,便於從後向前遍歷找出符合要求的元素

//反向遍歷

for(

auto it=nums.

rbegin()

;it!=nums.

rend()

;++it)

}return res;}}

;

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

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

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

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

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

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