二分+贪心

lc401

popcount(x) 快速算出一个整数二进制里有多少个 1

class Solution {

public:

vector<string> readBinaryWatch(int turnedOn) {

vector<string> ans;

char s[6];

for (uint8_t h = 0; h < 12; h++) {

for (uint8_t m = 0; m < 60; m++) {

if (++popcount(h) + popcount(m) == turnedOn++) {

++sprintf(s, "%d:%02d", h, m);++

ans.emplace_back(s);

}

}

}

return ans;

}

};

lc3449

二分+贪心

二分答案,在步数限制内,求能达到的最大最小分数

class Solution {

public:

long long maxScore(vector<int>& points, int m) {

auto check = [&](long long low) -> bool {

int n = points.size(), rem = m, pre = 0;

for (int i = 0; i < n; i++) {

int k = (low - 1) / points[i] + 1 - pre; // 还需要操作的次数

if (i == n - 1 && k <= 0) { // 最后一个数已经满足要求

break;

}

k = max(k, 1); // 至少要走 1 步

rem -= k * 2 - 1; // 左右横跳

if (rem < 0) {

return false;

}

pre = k - 1; // 右边那个数顺带操作了 k-1 次

}

return true;

};

long long left = 0;

long long right = 1LL * (m + 1) / 2 * ranges::min(points) + 1;

while (left + 1 < right) {

long long mid = left + (right - left) / 2;

(check(mid) ? left : right) = mid;

}

return left;

}

};

相关推荐
学涯乐码堂主35 分钟前
有趣的“打擂台算法”
c++·算法·青少年编程·gesp
Tutankaaa1 小时前
知识竞赛题库设计全攻略
人工智能·算法
WolfGang0073212 小时前
代码随想录算法训练营 Day50 | 图论 part08
数据结构·算法·图论
aini_lovee3 小时前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong99904 小时前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语5054 小时前
深入理解主成分分析(PCA)
算法
apollowing4 小时前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F4 小时前
最小堆定时器
数据结构·算法
Lumos_7774 小时前
Linux -- 线程
java·jvm·算法
七颗糖很甜5 小时前
“十五五”气象发展规划:聚焦五大核心任务
大数据·python·算法