我的解法:找到一个,添加一个,删除一个
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
if(nums1.size()==0||nums2.size()==0);
vector<int> jiaoji;
sort(nums1.begin(),nums1.end());sort(nums2.begin(),nums2.end());
for(int i=0;i<nums1.size();i++){
for(int j=0;j<nums2.size();j++){
if(nums1[i]>nums2[j])
continue;
if(nums1[i]==nums2[j])
{
jiaoji.push_back(nums1[i]);
nums2.erase(nums2.begin()+j);
break;
}
if(nums1[i]<nums2[j])
break;
}
}
return jiaoji;
}
解法一:同时循环迭代,节省时间同时没改变输入数组
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> result = {};
if(nums1.empty() || nums2.empty())
return result;
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
int i1 = 0, i2 = 0;
while(i1 != nums1.size() && i2 != nums2.size()) {
if(nums1[i1] < nums2[i2]) i1++;
else if(nums1[i1] > nums2[i2]) i2++;
else {
result.push_back(nums1[i1]);
i1++;
i2++;
}
}
return result;
}
解法二:使用map的性质
vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
vector<int> result;
if(nums1.size()==0||nums2.size()==0) return result;
unordered_map<int,int> hash;
for(int i=0; i<nums1.size(); i++){
if(hash.count(nums1[i])==0)
hash.insert(make_pair(nums1[i],1));
else hash[nums1[i]]++;
}
for(int j=0; j<nums2.size(); j++){
if(hash.count(nums2[j])>0&&hash[nums2[j]]>=1) {
result.push_back(nums2[j]);
hash[nums2[j]]--; } }
return result;
}
加一
我的解法:主要难点是进一操作;几次循环操作,检测尺寸小时加尺寸
vector<int> plusOne(vector<int>& digits) {
digits.back()++;
if (digits.back()/10==1){
digits.back()=0;
if(digits.size()<2)
{
digits.insert(digits.begin(),0);
}
digits[digits.size()-2]++;
for(int i=2;i<digits.size()+1;i++)
{
if (digits[digits.size()-i]/10==1)
{
digits[digits.size()-i]=0;
if(digits.size()<=i)
digits.insert(digits.begin(),0);
digits[digits.size()-i-1]++;
}
else break;
}
}
return digits;
}
解法一:如果是10就一直加下去,如果最后一次加依旧是10,则做尺寸扩张操作
vector<int> plusOne(vector<int>& digits) {
int flag=1;
for(int i=digits.size()-1;i>-1;i--){
digits[i]=digits[i]+flag;
flag=0;
if(digits[i]==10){
digits[i]=0;
flag=1;
}
else
break;
} if(flag==1){
vector<int> ans(digits.size()+1);
ans[0]=1;
for(int i=1;i<ans.size();i++){
ans[i]=digits[i-1];
}
return ans;
}
return digits;
}
解法二:(最好的)先从后向前消灭连续的会进一的9,如果i<0说明是全9,要改变尺寸
vector<int> plusOne(vector<int>& digits) {
int i = digits.size() - 1;
while (digits[i] == 9 && i>=0) {
digits[i--] = 0; };
if (i < 0) {
digits[0] = 1;
digits.push_back(0);
} else {
digits[i]++;
}
return digits;
}
我的解法:记录多少0的元素并删除,之后再添加
void moveZeroes(vector<int>& nums) {
int j=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]!=0)
continue;
if(nums[i]==0)
{
j++;
nums.erase(nums.begin()+i);
i--;
}
}
for(int z=0;z<j;z++)
nums.push_back(0);
}
解法一:直接复制简单明了
void moveZeroes(vector<int>& nums) {
int n=nums.size();
if(n==0) return ;
int count=0;
for(int i= 0;i<n;i++){
if(nums[i]!=0) nums[count++]=nums[i];
}
while(count<n)
nums[count++]=0;
}