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.

 

posted @ 2016-08-15 19:55  maxandhchen  阅读(183)  评论(0编辑  收藏  举报