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

2021-10-21 00:25:46 字數 1019 閱讀 3280

給你乙個整數陣列 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.首先,題目要求選擇乙個正整數作為除數,因此除數應該是大於0的數。

2.由於做除法運算時,都要向上取整,因此當所取整數字陣列中最大元素值時,陣列中所有整數除以該除數的和為陣列元素個數。又因為題目保證一定有解,所以,threshold的最小值應該為陣列元素個數。

3.綜上分析可知,最小整數的值應該在1至陣列最大元素之間。

整體思路

利用二分查詢區間[1,maxvalue],判斷是否存在乙個值ret,陣列中的所有元素值除以ret的和小於等於threshold並且陣列中所有元素的值除以ret-1的和大於threshold。

class solution 

else

}return sum;

}int smallestdivisor(vector& nums, int threshold)

//二分查詢確定最小的ret

int begin = 1,end = maxvalue,mid;

while(begin <= end)

else if(sum <= threshold)

else}}

return ret;

}};

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

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

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

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

LeetCode 使序列遞增的最小交換(動態規劃)

我們有兩個長度相等且不為空的整型陣列 a 和 b 我們可以交換 a i 和 b i 的元素。注意這兩個元素在各自的序列中應該處於相同的位置。在交換過一些元素之後,陣列 a 和 b 都應該是嚴格遞增的 陣列嚴格遞增的條件僅為a 0 a 1 a 2 a a.length 1 給定陣列 a 和 b 請返回...