第一题直接过了,哈希表
class Solution {
public:
vector<vector<int>> findDifference(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int>hash1;
unordered_set<int>hash2;
sort(nums1.begin(),nums1.end());
sort(nums2.begin(),nums2.end());
nums1.resize(distance(nums1.begin(), unique(nums1.begin(), nums1.end())));
nums2.resize(distance(nums2.begin(), unique(nums2.begin(), nums2.end())));
int m=nums1.size();
int n=nums2.size();
vector<vector<int>>res(2);
for(int i=0;i<m;i++)
{
hash1.insert(nums1[i]);
}
for(int i=0;i<n;i++)
{
hash2.insert(nums2[i]);
}
for(int i=0;i<m;i++)
{
if(!hash2.count(nums1[i]))
res[0].push_back(nums1[i]);
}
for(int i=0;i<n;i++)
{
if(!hash1.count(nums2[i]))
res[1].push_back(nums2[i]);
}
return res;
}
};
TLE了,有空再研究下咋回事
class Solution {
public:
int minDeletion(vector<int>& nums) {
int n=nums.size();
int i=0;
vector<int>temp(n,0);
int res=0;
for(int i=0;i<n;i++)
{
if(i%2)
temp[i]=-1;
else
temp[i]=1;
}
while(i<n-1)
{
if(nums[i]==nums[i+1])
{
int k=0;
while(i+k<n&&nums[i+k]==nums[i])
k++;
k--;
if(temp[i]==1)
{
res+=k;
/*
if(i+k==n-1)
return res;
*/
if(k%2)
{
for(int j=i+k+1;j<n;j++)
{
temp[j]=-temp[j];
}
}
}
else
{
if(k==1)
{
i+=2;
continue;
}
res+=k-1;
/*
if(i+k==n-1)
return res;
*/
if((k-1)%2)
{
for(int j=i+k+1;j<n;j++)
{
temp[j]=-temp[j];
}
}
}
i+=k+1;
continue;
}
i++;
}
//cout<<n-res<<endl;
if((n-res)%2)
res++;
return res;
}
};
回溯一定TLE
class Solution {
public:
vector<int>temp;
int res;
void seize(int n,int k,int count,vector<vector<int>>& piles)
{
if(k==0)
{
res=max(count,res);
return;
}
for(int i=0;i<n;i++)
{
if(temp[i]<piles[i].size())
{
count+=piles[i][temp[i]];
temp[i]++;
//cout<<count<<endl;
seize(n,k-1,count,piles);
temp[i]--;
count-=piles[i][temp[i]];
}
}
}
int maxValueOfCoins(vector<vector<int>>& piles, int k) {
int n=piles.size();
res=0;
for(int i=0;i<n;i++)
temp.push_back(0);
seize(n,k,0,piles);
return res;
}
};