您的位置:首页 > 其它

Array of Leetcode: EASY

2016-05-03 21:14 323 查看
EASY:

27.
Remove Element: 
https://leetcode.com/problems/remove-element/
这题非常简单,只需要从头到尾遍历用复合条件的数值覆盖前面标记位就ok了。

class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int i=0,len = nums.size();
for(int j=0;j<nums.size();j++)
if(nums[j]!=val)
nums[i++]=nums[j];
nums.resize(i);
return i;
}
};

1. Two Sum:
https://leetcode.com/problems/two-sum/
这题比较麻烦,要记住每个数字的位置,之后排序,两头夹击。记录位置的方法还是挺多的,可以用结构体,也可以用hash表。

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int len = nums.size();
vector<int>re;
map<int,vector<int>> hash;
for(int i=0;i<len;i++){
hash[nums[i]].push_back(i);
}
sort(nums.begin(),nums.end());
int i=0,j=len-1;
while(i<j){
if(nums[i]+nums[j]<target) i++;
else if(nums[i]+nums[j]>target)j--;
else{
re.push_back(hash[nums[i]][0]);
hash[nums[i]].erase(hash[nums[i]].begin());
re.push_back(hash[nums[j]][0]);
return re;
}
}
return re;
}
};


219. Contains Duplicate II

  https://leetcode.com/problems/contains-duplicate-ii/
这题的思路是,用map记录某数字最近出现的位置,若出现的位置符合条件则返回true,否则继续遍历。
class Solution {
public:
bool containsNearbyDuplicate(vector<int>& nums, int k) {
map<int,int>hash;
int len = nums.size();
for(int i=0;i<len;i++){
if(hash.find(nums[i])==hash.end()){
hash[nums[i]]=i;
}
else{
if(i-hash[nums[i]]<=k) return true;
else hash[nums[i]]=i;
}
}
return false;
}
};
217.
Contains Duplicate https://leetcode.com/problems/contains-duplicate/ 这题,我之前写的时候用的方法是,先排序然后遍历看后一个值是否和前一个值相同的方法,是用时间换空间的做法;下面我的做法是通过map记录当前的数字是否出现过来来判断。
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
map<int,int>hash;
int len = nums.size();
for(int i=0;i<len;i++){
if(hash.find(nums[i])==hash.end())
hash[nums[i]]=1;
else
return true;
}
return false;
}
};

189. Rotate Array https://leetcode.com/problems/rotate-array/ 很经典的一题了,很有必要搞懂。
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int len = nums.size();
k%=len;
reverse_nums(nums,0,len-1);
reverse_nums(nums,0,k-1);
reverse_nums(nums,k,len-1);
}
void reverse_nums(vector<int>& nums,int s,int e){
while(s<e){
nums[s]+=nums[e];
nums[e]=nums[s]-nums[e];
nums[s]-=nums[e];
s++;
e--;
}
}
};
88.
Merge Sorted Array https://leetcode.com/problems/merge-sorted-array/ 此题的思路是将数组一的数据向后拉n位,之后用归并的方法就ok了。
class Solution {
public:
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
for (int i = m - 1; i > -1; i--) nums1[i + n] = nums1[i];
int idx1 = n, idx2 = 0, i = 0;
while (idx1 < m + n && idx2 < n) {
if (nums1[
4000
idx1] <= nums2[idx2]) nums1[i++] = nums1[idx1++];
else nums1[i++] = nums2[idx2++];
}
if (idx1 == m + n) while (idx2 < n) nums1[i++] = nums2[idx2++];
}
};


283. Move Zeroes

    https://leetcode.com/problems/move-zeroes/ 这题很简单,相信看了代码就能理解了。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int len = nums.size(),index=0;
for(int i=0;i<len;i++)  //遍历,将非零值赋值
if(nums[i]!=0) nums[index++]=nums[i];
while(index<len){       //用0覆盖后面的值
nums[index++]=0;
}
}
};
169.
Majority Element https://leetcode.com/problems/majority-element/ 很技巧的一道的题,我的理解是只适用于默认存在这样的数的情况。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int len=nums.size(),cnt=0,maj;
for(int i=0;i<len;i++){
if(cnt==0){
cnt=1;
maj=nums[i];
}
else
maj==nums[i]? cnt++:cnt--;
}
return maj;
}
};



121. Best Time to Buy and Sell Stock

 
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 可能有很多解法,但是我认为这种方法的掌握是很必要的。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int len = prices.size();
if(len<=1)return 0;
vector<int>buf(len,0);
int cur = prices[0];
int pro = 0;
for(int i=1;i<len;i++){
buf[i] = max(buf[i],prices[i]-cur);
cur = min(cur,prices[i]);
pro = max(pro,buf[i]);
}
return pro;
}
};


119. Pascal's Triangle II
https://leetcode.com/problems/pascals-triangle-ii/
class Solution {
public:
vector<int> getRow(int rowIndex) {
vector<int>row(rowIndex+1,1);
for(int t=1;t<rowIndex;t++)
for(int j=t;j>0;j--)
row[j]+=row[j-1];
return row;
}
};



118. Pascal's Triangle

  
https://leetcode.com/problems/pascals-triangle/
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>>res;
for(int t=0;t<numRows;t++){
vector<int>re(t+1,1);
for(int j=1;j<t;j++){
re[j]=res[t-1][j]+res[t-1][j-1];
}
res.push_back(re);
}
return res;
}
};

66. Plus One https://leetcode.com/problems/plus-one/
class Solution {
public:
vector<int> plusOne(vector<int>& digits) {
int pos=digits.size()-1,carry=1;
while(pos>=0){
digits[pos]+=carry;
carry = digits[pos]/10;
digits[pos]%=10;
pos--;
}
if(carry!=0) digits.insert(digits.begin(),carry);
return digits;
}
};


26. Remove Duplicates from Sorted Array

    https://leetcode.com/problems/remove-duplicates-from-sorted-array/
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int remove_count = 0;

for (int i = 1; i < nums.size(); i++) {
if (nums[i] == nums[i - 1])
remove_count++;
else {
if (remove_count != 0)
nums[i - remove_count] = nums[i];
}
}
nums.resize(nums.size()-remove_count);
return nums.size();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: