1664 生成平衡陣列的方案數

2021-10-10 17:50:43 字數 1974 閱讀 8479

題目描述:

給你乙個整數陣列 nums 。你需要選擇 恰好 乙個下標(下標從 0 開始)並刪除對應的元素。請注意剩下元素的下標可能會因為刪除操作而發生改變。

比方說,如果 nums = [6,1,7,4,1] ,那麼:

選擇刪除下標 1 ,剩下的陣列為 nums = [6,7,4,1] 。

選擇刪除下標 2 ,剩下的陣列為 nums = [6,1,4,1] 。

選擇刪除下標 4 ,剩下的陣列為 nums = [6,1,7,4] 。

如果乙個陣列滿足奇數下標元素的和與偶數下標元素的和相等,該陣列就是乙個 平衡陣列 。

請你返回刪除操作後,剩下的陣列 nums 是 平衡陣列 的 方案數 。

示例 1:

輸入:nums = [2,1,6,4]

輸出:1

解釋:刪除下標 0 :[1,6,4] -> 偶數元素下標為:1 + 4 = 5 。奇數元素下標為:6 。不平衡。

刪除下標 1 :[2,6,4] -> 偶數元素下標為:2 + 4 = 6 。奇數元素下標為:6 。平衡。

刪除下標 2 :[2,1,4] -> 偶數元素下標為:2 + 4 = 6 。奇數元素下標為:1 。不平衡。

刪除下標 3 :[2,1,6] -> 偶數元素下標為:2 + 6 = 8 。奇數元素下標為:1 。不平衡。

只有一種讓剩餘陣列成為平衡陣列的方案。

示例 2:

輸入:nums = [1,1,1]

輸出:3

解釋:你可以刪除任意元素,剩餘陣列都是平衡陣列。

示例 3:

輸入:nums = [1,2,3]

輸出:0

解釋:不管刪除哪個元素,剩下陣列都不是平衡陣列。

1 <= nums.length <= 105

1 <= nums[i] <= 104

方法1:

主要思路:

(1)先分別統計陣列元素的奇數和和偶數和;

(2)再將統計的陣列和的陣列統一成一種形式,既奇數個元素,便於統一處理;

(3)再逐個的去除各個元素,根據其對後面元素的影響,判斷之後的奇數和和偶數和是否一致;

class

solution

if(nums.

size()

==2)//將奇數和和偶數和統計到同乙個陣列中

vector<

int>

sum_num

(nums.

size()

,0);

//初始化

sum_num[0]

=nums[0]

; sum_num[1]

=nums[1]

;for

(int i=

2;isize()

;++i)

//將陣列統一成一種形式,既有奇數個元素

if(nums.

size()

%2==0

)int res=0;

//統計最終符合要求的數量

//總的奇數和偶數之和的兩個變數

int odd_sum=sum_num[sum_num.

size()

-2];

int even_sum=sum_num.

back()

;//處理前兩個元素的特殊的情形

if(even_sum-nums[0]

==odd_sum)

if(even_sum-nums[0]

==odd_sum-nums[1]

+nums[0]

)//依次去除後面的元素

for(

int i=

2;isize()

;++i)

}else}}

return res;}}

;

Leetcode 1664 生成平衡陣列的方案數

給你乙個整數陣列 nums 你需要選擇 恰好 乙個下標 下標從 0 開始 並刪除對應的元素。請注意剩下元素的下標可能會因為刪除操作而發生改變。比方說,如果 nums 6,1,7,4,1 那麼 選擇刪除下標 1 剩下的陣列為 nums 6,7,4,1 選擇刪除下標 2 剩下的陣列為 nums 6,1,...

生成平衡陣列的方案數

生成平衡陣列的方案數 給你乙個整數陣列nums。你需要選擇 恰好 乙個下標 下標從 0 開始 並刪除對應的元素。請注意剩下元素的下標可能會因為刪除操作而發生改變。比方說,如果nums 6,1,7,4,1 那麼 如果乙個陣列滿足奇數下標元素的和與偶數下標元素的和相等,該陣列就是乙個 平衡陣列 請你返回...

c 11 生成隨機數

過程中需要輸入自變數得到輸出結果。一般來說,如果在定義域中通過列舉的方式選取自變數,所需 要的時間會很長。如果選取特定的點作為自變數,程式或數學模型的正確性無法得到保證。如果隨機選取一定數量 的自變數,所需時間可以依選取的自變數數目而定,的結果能夠反映一般情況下的結果。c 11提供均勻分布 伯努利分...