Array of Leetcode: EASY
2016-05-03 21:14
323 查看
EASY:
27.
Remove Element:
https://leetcode.com/problems/remove-element/
这题非常简单,只需要从头到尾遍历用复合条件的数值覆盖前面标记位就ok了。
1. Two Sum:
https://leetcode.com/problems/two-sum/
这题比较麻烦,要记住每个数字的位置,之后排序,两头夹击。记录位置的方法还是挺多的,可以用结构体,也可以用hash表。
219. Contains Duplicate II
https://leetcode.com/problems/contains-duplicate-ii/
这题的思路是,用map记录某数字最近出现的位置,若出现的位置符合条件则返回true,否则继续遍历。
Contains Duplicate https://leetcode.com/problems/contains-duplicate/ 这题,我之前写的时候用的方法是,先排序然后遍历看后一个值是否和前一个值相同的方法,是用时间换空间的做法;下面我的做法是通过map记录当前的数字是否出现过来来判断。
189. Rotate Array https://leetcode.com/problems/rotate-array/ 很经典的一题了,很有必要搞懂。
Merge Sorted Array https://leetcode.com/problems/merge-sorted-array/ 此题的思路是将数组一的数据向后拉n位,之后用归并的方法就ok了。
https://leetcode.com/problems/move-zeroes/ 这题很简单,相信看了代码就能理解了。
Majority Element https://leetcode.com/problems/majority-element/ 很技巧的一道的题,我的理解是只适用于默认存在这样的数的情况。
https://leetcode.com/problems/best-time-to-buy-and-sell-stock/ 可能有很多解法,但是我认为这种方法的掌握是很必要的。
119. Pascal's Triangle II
https://leetcode.com/problems/pascals-triangle-ii/
https://leetcode.com/problems/pascals-triangle/
66. Plus One https://leetcode.com/problems/plus-one/
https://leetcode.com/problems/remove-duplicates-from-sorted-array/
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; } };
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(); } };
相关文章推荐
- 两个JFramen之间的通信
- 数组指针和指针数组的区别
- CSS3滤镜-水平和垂直翻转图片
- 【驱动笔记14】初步认识MDL
- 打印10行10列★
- redis性能优化
- C经典 使用选择排序排列字符串数组
- putty连接虚拟机
- 第一个缺失的整数
- spark 的reduce操作
- Spark组件之GraphX学习7--随机图生成和reduce最大或最小出度/入度/度
- Spring+Swagger文档无法排序问题解决
- 线性表
- 【VS开发】VC++ 获取系统时间、程序运行时间(精确到秒,毫秒)的五种方法
- 类型化和泛型化的 Table View Controller
- 为了解决一些麻烦的事情
- Problem F: 求三角形面积-gyy
- 链表
- 用小猫统计制作运动员评价管理系统:分别制作子表的编辑界面
- volatile 变量