力扣 1338 陣列大小減半

2021-10-25 06:03:22 字數 1349 閱讀 9586

給你乙個整數陣列arr。你可以從中選出乙個整數集合,並刪除這些整數在陣列中的每次出現。

返回至少能刪除陣列中的一半整數的整數集合的最小大小。

輸入:arr = [3,3,3,3,5,5,5,2,2,7]輸出:2解釋:選擇  使得結果陣列為 [5,5,5,2,2]、長度為 5(原陣列長度的一半)。

大小為 2 的可行集合有 ,,。

選擇 是不可行的,它的結果陣列為 [3,3,3,3,5,5,5],新陣列長度大於原陣列的二分之一。輸入:arr = [7,7,7,7,7,7]輸出:1解釋:我們只能選擇集合 ,結果陣列為空。輸入:arr = [1,9]輸出:1輸入:arr = [1000,1000,3,7]輸出:1輸入:arr = [1,2,3,4,5,6,7,8,9,10]輸出:5

1 <= arr.length <= 10^5

arr.length為偶數

1 <= arr[i] <= 10^5

一、先統計每個數字的個數,存到陣列裡 a。 原來陣列總長度一半為 s

二、再看這些陣列裡 a 的子陣列的的有沒有剛好等於s,如果沒有,再看有沒有超過一些的。這些迴圈。

三、按照二的想法,這是乙個 0-1 揹包問題。  注意到一點, 陣列 a 的總個數是一定, 即為2s。  也即是說,不會有這種現象,存在乙個子陣列,長度超過s。 同時也存在乙個子陣列,長度 = s。 

四、按三的分析,這個最用貪心就可以解決,先把a 從大到小排序 ,遍歷累加個數,直到剛好超過 s ,那這個子陣列個數就是題意要求的個數

public int minsetsize(int arr) 

// 求nums 裡面,有沒有和為 len 的

arrays.sort(nums);

int p = 0;

int t = 0;

for (int i = nums.length - 1; i >= 0; i--)

} return t;

}

1338 陣列大小減半

題目描述 給你乙個整數陣列 arr。你可以從中選出乙個整數集合,並刪除這些整數在陣列中的每次出現。返回 至少能刪除陣列中的一半整數的整數集合的最小大小。解題思路 這道題思路非常簡單,統計每個整數出現的次數,然後按出現次數降序對這些數進行排序,依次刪除掉當前出現次數最多的數,直到已經達到原陣列大小的一...

Leetcode 5329 陣列大小減半

給你乙個整數陣列 arr。你可以從中選出乙個整數集合,並刪除這些整數在陣列中的每次出現。返回 至少 能刪除陣列中的一半整數的整數集合的最小大小。示例 1 輸入 arr 3,3,3,3,5,5,5,2,2,7 輸出 2 解釋 選擇 使得結果陣列為 5,5,5,2,2 長度為 5 原陣列長度的一半 大小...

力扣 陣列的度

給定乙個非空且只包含非負數的整數陣列,陣列的度定義為陣列中任意乙個元素出現頻率的最大值。找到與給定陣列同樣度大小的最短連續子陣列,返回其長度。例如 輸入 1,2,2,3,1 輸出 2 輸入陣列的度是2,因為元素1和2的出現頻數最大,均為2。連續子陣列裡面擁有相同度的有如下所示 1,2,2,3,1 1...