leetcode数组篇
数组:
1.删除数组中的某个值:
int removeElement(vector<int>& nums, int val)
{
for(int j=nums.size()-1;j>=0;j--)
{
if(nums[j]==value)
{
nums.erase(nums.begin()+j);
}
return nums.size();
}
}
2.合并有序的数组:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n)
{
nums1.resize(nums1.size()+nums2.size());
int p1=m-1;
int p2=n-1;
while(int i=m+n-1;i>=0;i--)
{
if(p1<0)
{
nums1[i]=nums[p2--]
}
if(p2<0)
{
nums1[i]=nums[p1--]
}
if(nums1[p1]>nums2[p2])
nums1[i]=nums1[p1--];
else
nums1[i]=nums1[p2--];
}
}
3.数字加1;
注意判断最高位;
4.出现次数最多的数字
5.旋转数组:
void reverse(vector<int>&nums,int k)
{
int n=nums.size();
k=k%n;
reverse(nums.begin(),nums.begin()+(n-k));
reverse(nums.begin()+(n-k),nums.end());
reverse(nums.begin(),nums.end());
}
5.给定一个排好序的数组,删除数组中的重复数字:
从尾往前删除;
6.找到数组相差k距离相等的数:
bool containsNearbyDuplicate(vector<int>& nums, int k)
{
map<int ,int > intmap;
map<int ,int >::iterator iter;
for(int i=0;i<i<nums.size(); i++)
{
if(iter=intmap.find(nums[i])!=intmap.end())
{
if(i-iter->second<k)
{
return true;
}
else
{
intmap.erase(iter);
}
intmap.insert(pair<int ,int>(nums[i],i));
}
}
return false;
}
7.从数组中查找两个数使其和等于某个特定值;
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int>Vindiec;
int p1=0;
int p2=nums.size();
while(p1!=p2)
{
if(nums[p1]+nums[p2]==target)
Vindiec.push_back(i);
Vindiec.push_back(j);
else if(nums[p1]+nums[p2]<target)
{
p1++;
}
else
p2--;
}
return Vindiec;
}
8.删除数组中的零元素
9.