二分查找解题:咒语与药水的成功配对
二分查找class Solution: def successfulPairs( self, spells: List[int], potions: List[int], success: int ) - List[int]: ans [] n len(potions) potions.sort() for num in spells: left, right 0, len(potions) while left right: mid (left right) // 2 if num * potions[mid] success: left mid 1 else: right mid ans.append(n - left) return ans定义ans列表接收答案对列表potions排序通过for循环遍历spells判断每个咒语能成功的药水数。对中点处乘积判断若小于success则leftmid1因为索引小于等于mid的都小于success不满足条件否则rightmidmid左边的都满足条件。由此求得满足大于等于success的第一个索引leftn-left即为满足条件的数。例num 5left0right5mid 2即33*515success7执行right 2再更新mid 1.此时left0right2mid 1对应数字为22*510success 7执行right 1更新mid 0left 0不变更新mid 0对应11*55不满足left 1退出循环即从1开始都满足个数为n-14.依次循环操作。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443022.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!