Leetcode 202场周赛题解_操作数

思路:
枚举连续个数为三的即可

参考代码:

class Solution {
public:
bool threeConsecutiveOdds(vector<int>& arr) {
int ans=0;
for(int i=0;i<arr.size();i++)
{
if(arr[i]&1)
ans++;
else
ans=0;
if(ans==3)
return true;
}
return false;
}
};

Leetcode 202场周赛题解_操作数_02

思路:小于n的等差数列中数和n差的和
参考代码:

class Solution {
public:
int minOperations(int n) {
int ans=0;
for(int i=0;i<n;i++)
{
ans+=max(0,n-(i*2+1));
}
return ans;
}
};

Leetcode 202场周赛题解_i++_03两球之间的磁力

思路:
二分枚举距离即可

参考代码:

class Solution {
int a[100005];
bool check(int mid,int n,int m)
{
int ans=1,st=a[1];
for(int i=2;i<=n;i++)
{
if(a[i]-st>=mid)
st=a[i],ans++;
}
if(ans>=m)
return true;
return false;
}
public:
int maxDistance(vector<int>& p, int m) {
int n=p.size();
for(int i=1;i<=n;i++)
a[i]=p[i-1];
sort(a+1,a+1+n);
int l=1,r=1000000000,ans=0;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid,n,m))
l=mid+1,ans=mid;
else
r=mid-1;
}
return ans;
}
};

Leetcode 202场周赛题解_操作数_04

这题用Leetcode 202场周赛题解_操作数_05标签,说实话是含量不够
思路:
用递归枚举和map记忆化,来求最小操作数,复杂度可以做到Leetcode 202场周赛题解_数组_06
参考代码:

class Solution {
map<int,int>dp;
int dfs(int n)
{
if(dp[n])
return dp[n];
if(n==1)
return 1;
dp[n]=min(dfs(n-(n%2==0)*(n/2)-(n%2!=0))+1,dfs(n-(n%3==0)*(n/3)*2-(n%3!=0))+1);
return dp[n];
}
public:
int minDays(int n) {
return dfs(n);
}
};