3007. Maximum Number That Sum of the Prices Is Less Than or Equal to K

3007. Maximum Number That Sum of the Prices Is Less Than or Equal to K

python 复制代码
class Solution:
    def findMaximumNumber(self, k: int, x: int) -> int:
        def check(v):
            A=list(map(int,bin(v)[2:]))
            n=len(A)
            res=p=0
            for i,v in enumerate(A):
                if v==1:
                    l=n-i-1
                    res+=(p<<l)+((l//x)<<(l-1) if l else 0)
                if (n-i)%x==0:
                    p+=v
            return res+p

        l,r=1,10**15
        while l<r:
            mid=(l+r+1)//2
            if check(mid)<=k:
                l=mid
            else:
                r=mid-1
        return l

p记录的是前面有几位可以是1

l表示空闲位

l//x表示空闲位中可以为1,位的个数

(l-1)表示当其中一位设置为1,剩余位的个数

这里会重复枚举数字,但是每个为1的位只算了一次

相关推荐
岁忧4 小时前
(LeetCode 每日一题) 36. 有效的数独 (数组、哈希表)
java·c++·算法·leetcode·go·散列表
楼田莉子6 小时前
C++算法学习专题:前缀和
c++·学习·算法·leetcode·蓝桥杯
HalvmånEver8 小时前
盛最多水的容器:双指针法的巧妙运用(leetcode 11)
c++·学习·leetcode
YSRM11 小时前
Leetcode+Java+动态规划IV
java·leetcode·动态规划
YoungHong199218 小时前
面试经典150题[019]:最后一个单词的长度(LeetCode 58)
leetcode·面试·职场和发展
圣保罗的大教堂1 天前
leetcode 3446. 按对角线进行矩阵排序 中等
leetcode
Swift社区1 天前
Swift 解法详解:LeetCode 367《有效的完全平方数》
开发语言·leetcode·swift
君万1 天前
【LeetCode每日一题】21. 合并两个有序链表 2. 两数相加
算法·leetcode·链表
熬了夜的程序员2 天前
【LeetCode】30. 串联所有单词的子串
算法·leetcode·链表·职场和发展·深度优先
一支鱼2 天前
leetcode-1-两数之和
算法·leetcode·typescript