位运算|拆分贪心

lcp63

遍历矩形边界的空位置,模拟小球按指定步数和方向规则移动

判断是否能到达目标点O,收集所有符合条件的起始位置

++'W'
d = (d + 3) % 4; // 逆时针转
++

抽象出检查函数复用

check(0, j, 1, num, plate))

ans.push_back({0, j});

#include <vector>

#include <string>

using namespace std;

class Solution {

private:

// 右下左上(顺时针)

const int DIRS42 = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};

int m, n;

bool check(int x, int y, int d, int num, const vector<string>& plate) {

int left = num;

while (platexy != 'O') {

if (left == 0) return false;

if (platexy == ++'W')
d = (d + 3) % 4; // 逆时针转
++

else if (platexy == 'E')

d = (d + 1) % 4; // 顺时针转

x += DIRSd0;

y += DIRSd1;

if (x < 0 || x >= m || y < 0 || y >= n)

return false;

left--;

}

return true;

}

public:

vector<vector<int>> ballGame(int num, vector<string>& plate) {

m = plate.size();

n = plate0.size();

vector<vector<int>> ans;

// 检查上边(除首尾)

for (int j = 1; j < n - 1; j++) {

if (plate0j == '.' && ++check(0, j, 1, num, plate)) {
ans.push_back({0, j});
++

}

}

// 检查下边

for (int j = 1; j < n - 1; j++) {

if (platem - 1j == '.' && check(m - 1, j, 3, num, plate)) {

ans.push_back({m - 1, j});

}

}

// 检查左边

for (int i = 1; i < m - 1; i++) {

if (platei0 == '.' && check(i, 0, 0, num, plate)) {

ans.push_back({i, 0});

}

}

// 检查右边

for (int i = 1; i < m - 1; i++) {

if (platein - 1 == '.' && check(i, n - 1, 2, num, plate)) {

ans.push_back({i, n - 1});

}

}

return ans;

}

};

lc2835

给一个全是2的幂的非负整数数组和目标值,可将数组中大于1的元素拆成两个其1/2的数(算一次操作)

求让数组存在和为目标值的子序列的最少操作次数,无法实现则返回-1

统计数组元素的二进制幂次计数,

累加幂次和并与目标值二进制分段比对,++不足时拆分更大幂次元素补充++

统计拆分操作次数得到最小操作数

class Solution {

public:

int minOperations(vector<int>& nums, int target) {

if (accumulate(nums.begin(), nums.end(), 0LL) < target) {

return -1;

}

int cnt31{};

for (int x : nums) {

cnt__builtin_ctz(x)++;

}

int ans = 0, i = 0;

long long s = 0;

while ((1LL << i) <= target) {

s += (long long) cnti << i;

int mask = (1LL << ++i) - 1;

if (s >= (target & mask)) {

continue;

}

ans++; // 一定要找更大的数操作

for (; cnti == 0; i++) {

ans++; // 还没找到,继续找更大的数

}

}

return ans;

}

};

相关推荐
饼饼学习空间智能1 小时前
遥操作数据能否提升机器人自主化水平?详解模仿学习、仿真放大与Sim2Real闭环
人工智能·算法
间歇性努力持续性发呆的野生快乐选手2 小时前
dfs回溯,bfs枚举,完全背包
c++·算法·深度优先·宽度优先
郝学胜_神的一滴2 小时前
干货版《算法导论》17:双数极值配对与卡牌手牌编码最优解
数据结构·算法
nike0good3 小时前
Codeforces Round 1101 (Div. 2) 题解
算法
中年阿甘3 小时前
解析式布局-二次线长布局
线性代数·算法·矩阵
程序喵大人3 小时前
【C++进阶】STL算法与函数对象 -【C++进阶】STL算法与函数对象
开发语言·c++·算法
星轨初途4 小时前
LeetCode 热题 100——day6 三数之和
数据结构·c++·算法·leetcode·职场和发展
鹿角片ljp4 小时前
LeetCode 53. 最大子数组和
算法·leetcode·职场和发展
江屿风4 小时前
【科普】【差集&交集概念落地云相册】流食般投喂
开发语言·c++·笔记·算法·云相册
数模竞赛Paid answer4 小时前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯