1.力扣
先找出偶数存入map定义的 m 中,再遍历找出现最多的最小偶数
class Solution {
public:
int mostFrequentEven(vector<int>& nums) {
map<int,int> m;
for(auto i:nums){
if(i%2==0) m[i]++;
}
if(m.size()==0) return -1;
int max = -1,res;
for(auto i:m){
if(i.second > max) max= i.second,res=i.first;
}
return res;
}
};
2.力扣
贪心思想,如果没有出现同一字母就组一起,出现则重新分配一个子串,最后输出字串个数即可
class Solution {
public:
int partitionString(string s) {
int i = 0;
int ans = 0;
while (i < s.size()) {
int j = i;
int mask = 0;
while (j < s.size() && (mask & (1 << (s[j] - 'a'))) == 0) {
mask |= 1 << (s[j++] - 'a');
}
ans++;
i = j;
}
return ans;
}
};
定义两个指针,找到第一个“1”用指针left来存放,找到最后一个,用right来存放,最后查找left到right即可,最后输出范围内有多少个0
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--){
string s;
cin>>s;
if(s=="0") puts("0");
else{
int l=0,r=0;
for(int i=0;i<s.size();i++){
if(s[i]=='1') {
l=i;
break;
}
}
for(int i=s.size()-1;i>=0;i--){
if(s[i]=='1'){
r=i;
break;
}
}
int ans=0;
for(int i=l;i<r;i++){
if(s[i]=='0') ans++;
}
cout<<ans<<endl;
}
}
return 0;
}
先找第一次出现和最后一次 > < 的点,只有在第一次左边出现< 或者最后一次右边出现 > 才有可能出界
#include<bits/stdc++.h>
useing namespace std;
const int N=1e5+10;
int main()
{
int n;
cin>>n;
string s;
cin>>s;
if(n==1)
{
cout<<"1"<<endl;
}
else
{
int res=0;
vector<int>v;
for(int i=0;i<s.size()-1;i++)
if(s[i]=='>'&&s[i+1]=='<')v.push_back(i);
if(v.size()>0)
for(int i=0;i<v[0];i++)
if(s[i]=='<')res++;
if(v.size()>1)
for(int i=v[v.size()-1]+2;i<s.size();i++)
if(s[i]=='>')res++;
if(v.size()==0)res=n;
cout<<res<<endl;
}
return 0;
}