第一次打双周赛。。
第二题超时代码:
class Solution {
public:
long long maximumSubsequenceCount(string text, string pattern) {
vector<int>a;
vector<int>b;
for(int i=0;i<text.size();i++){
if(text[i]==pattern[0])a.push_back(i);
if(text[i]==pattern[1])b.push_back(i);
}
if(a.size()>=b.size())b.push_back(100000);
//else a.insert(a.begin(),-1);
else a.push_back(-1);
long long ways=0;
for(int i=0;i<a.size();i++){
for(int j=0;j<b.size();j++){
if(b[j]>a[i]){
ways+=b.size()-j;
break;
}
}
}
return ways;
}
};
正确代码:
class Solution {
public:
long long maximumSubsequenceCount(string text, string pattern) {
int asize=0,bsize=0;
long long ways=0;
int flag=0;
for(int i=0;i<text.size();i++){
if(text[i]==pattern[0])asize++;
if(text[i]==pattern[1])bsize++;
}
if(asize==0&&bsize==0)return ways;
if(pattern[0]==pattern[1]){
text.append(pattern.substr(1,1));
for(int i=0;i<text.size();i++){
if(text[i]==pattern[0]){
ways+=flag;
flag++;
}
}
return ways;
}
if(asize>=bsize)text.append(pattern.substr(1,1));
else text.insert(0,pattern.substr(0,1));
for(int i=0;i<text.size();i++){
if(text[i]==pattern[0])flag++;
if(text[i]==pattern[1])ways+=flag;
}
return ways;
}
};
第三题错误代码:
class Solution {
public:
int halveArray(vector<int>& nums) {
int n=nums.size();
float sum=0;
vector<float>nums1(n);
for(int i=0;i<n;i++){
nums1[i]=(float)nums[i];
sum+=nums1[i];
}
int k=sum;
int count=0;
while(k>=sum/2){
int maxflag=0;
for(int i=0;i<n;i++){
if(nums1[i]>nums1[maxflag])maxflag=i;
}
nums1[maxflag]/=2;
k-=nums1[maxflag];
count++;
}
return count;
}
};
超时代码:
class Solution {
public:
int halveArray(vector<int>& nums) {
int n=nums.size();
double sum=0;
vector<double>nums1(n);
for(int i=0;i<n;i++){
nums1[i]=(double)nums[i];
sum+=nums1[i];
}
double k=sum;
int count=0;
while(k>=sum/2){
int maxflag=0;
for(int i=0;i<n;i++){
if(nums1[i]>nums1[maxflag])maxflag=i;
}
nums1[maxflag]/=2;
k-=nums1[maxflag];
count++;
}
return count;
}
};
居然是用优先队列。。好吧我寄了。。
正确代码:
class Solution {
public:
priority_queue<double> a;
int halveArray(vector<int>& nums) {
double sum=0,num=0;
while(!a.empty())a.pop();
for(int i=0;i<nums.size();i++)a.push(nums[i]),sum+=nums[i];
for(int i=1;i<=nums.size();i++)
{
double xx=a.top();a.pop();
num+=xx/2.0;
a.push(xx/2.0);
if(num>=sum/2.0)return i;
}
return nums.size();
}
};