二分|回溯
08.12 八皇后
bool col[1000] = {false}; // init
bool diga[1000] = {false};
bool digb[2000] = {false};
class Solution {
vector<vector<string>> ret;
vector<string> path;
bool col[1000] = {false}; // init
bool diga[1000] = {false};
bool digb[2000] = {false};
int n;
public:
vector<vector<string>> solveNQueens(int n) {
this->n = n;
path.resize(n, string(n, '.'));
dfs(0);
return ret;
}
void dfs(int r) {
if (r == n) {
ret.push_back(path);
return;
}
for (int i = 0; i < n; i++) {
if (!col[i] && !diga[i + r] && !digb[i - r + 1000]) {
path[r][i] = 'Q';
col[i] = diga[i + r] = digb[i - r + 1000] = true;
dfs(r + 1);
col[i] = diga[i + r] = digb[i - r + 1000] = false;
path[r][i] = '.';
}
}
}
};
lc410
二分
class Solution {
public:
int splitArray(vector<int>& nums, int k)
{
int n=nums.size();
int mx=0,sum=0;
for(auto& num:nums)
{
sum+=num;
mx=max(mx,num);
}
int l=mx;
int r=sum;
function<bool(int)> can=[&](int mid)
{
int cnt=0,sum=0;
for(auto& num:nums)
{
sum+=num;
if(sum>mid)
{
cnt++;
sum=num;
}
}
if(cnt<k)
return true;
else
return false;
};
while(l<=r)
{
int mid=l+(r-l)/2;
if(can(mid))
{
r=mid-1;
}
else
{
l=mid+1;
}
}
return l;
}
};