1283 使結果不超過閾值的最小除數(二分查詢)

2021-10-05 18:58:08 字數 1114 閱讀 1194

1. 問題描述:

給你乙個整數陣列 nums 和乙個正整數 threshold  ,你需要選擇乙個正整數作為除數,然後將陣列裡每個數都除以它,並對除法結果求和。

請你找出能夠使上述結果小於等於閾值 threshold 的除數中最小的那個。

每個數除以除數後都向上取整,比方說 7/3 = 3 , 10/2 = 5 。

題目保證一定有解。

示例 1:

輸入:nums = [1,2,5,9], threshold = 6

輸出:5

解釋:如果除數為 1 ,我們可以得到和為 17 (1+2+5+9)。

如果除數為 4 ,我們可以得到和為 7 (1+1+2+3) 。如果除數為 5 ,和為 5 (1+1+1+2)。

示例 2:

輸入:nums = [2,3,5,7,11], threshold = 11

輸出:3

示例 3:

輸入:nums = [19], threshold = 5

輸出:4

1 <= nums.length <= 5 * 10^4

1 <= nums[i] <= 10^6

nums.length <= threshold <= 10^6

2. 思路分析:

① 首先需要讀懂題目,題目的主要意思是找到乙個除數,使得陣列中所有元素除以這個除數結果的的累加和小於等於threshold,並且假如有多個結果相同的話那麼返回最小的除數

② 從題目可以知道題目是有解的,所以可以知道最大的除數為陣列元素的最大值,所以我們需要對給出的陣列進行排序陣列的最後乙個元素就是最大值,然後我們可以使用二分查詢的思想來找到這個除數,l在一開始的時候為1,r在為陣列元素的最大值,當除以整個除數的時候發現累加的結果太大了那麼需要將l向右移動,否則向左移動

3. **如下:

class solution 

/*因為要找到最小的那個所以需要使用乙個變數來記錄*/

if (sum <= threshold)

else l = mid + 1;

}return res;

}}

力扣 1283 使結果不超過閾值的最小除數

1283.使結果不超過閾值的最小除數 難度中等17收藏分享切換為英文關注反饋 給你乙個整數陣列nums和乙個正整數threshold,你需要選擇乙個正整數作為除數,然後將陣列裡每個數都除以它,並對除法結果求和。請你找出能夠使上述結果小於等於閾值threshold的除數中最小的那個。每個數除以除數後都...

leetcode 使結果不超過閾值的最小除數

給你乙個整數陣列 nums 和乙個正整數 threshold 你需要選擇乙個正整數作為除數,然後將陣列裡每個數都除以它,並對除法結果求和。請你找出能夠使上述結果小於等於閾值 threshold 的除數中最小的那個。每個數除以除數後都向上取整,比方說 7 3 3 10 2 5 題目保證一定有解 示例 ...

Android EditText不超過2位小數

android edittext兩種方法限制輸入兩位小數 說實話,這個需求簡直可以說無處不在了,因為,只要有輸入金額的需求,客戶端限制輸入位數幾乎是肯定的。1.首位輸入.的時候,補全為0.2.刪除 後面超過2位後的資料 3.如果起始位置為0,且第二位跟的不是 則無法後續輸入 描述 金額輸入字型監聽類...