码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode1283

时间:2019-12-08 12:39:29      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:tar   根据   lis   左右   sel   比较   style   二分   viso   

 1 class Solution:
 2     def smallestDivisor(self, nums: List[int], threshold: int) -> int:
 3         n = len(nums)
 4         nums = sorted(nums)
 5         l,h = 1,nums[n-1]
 6         target = h
 7         while l <= h:
 8             mid = l + (h - l) // 2
 9             r = 0
10             for i in range(n):
11                 cur = nums[i]
12                 fix = 0
13                 if cur % mid != 0:
14                     fix += 1
15                 r += cur // mid + fix
16             if r <= threshold:
17                 target = mid
18                 h = mid - 1
19             else:#r > threshold
20                 l = mid + 1
21         return target

算法思想:二分查找。

从1到nums中的最大值,作为左右边界。进行二分查找。

target默认为nums中的最大值,这样保证除数之和最小。(此时r=1 * n)

每次以mid作为除数计算目标值,并根据目标值与threshold的比较,进行二分查找。

注意第7行的判断条件是 l <= h。

本周比较顺利的完成了3道题目,1284是hard难度,考虑了一下没有思路,放弃了。

leetcode1283

标签:tar   根据   lis   左右   sel   比较   style   二分   viso   

原文地址:https://www.cnblogs.com/asenyang/p/12005132.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!