
线性表
永远的EMT
每天时刻保持超越自我的意识
展开
-
【LeetCode】66. Plus One
题解:注意进位处理产生多一位的情况class Solution {public: vector plusOne(vector &digits) { int n = digits.size(); for (int i = n - 1; i >= 0; --i) { if (digits[i] == 9) digits[i] = 0原创 2017-07-20 18:07:11 · 203 阅读 · 0 评论 -
【LeetCode】532. K-diff Pairs in an Array
Given an array of integers and an integer k, you need to find the number of unique k-diff pairs in the array. Here a k-diff pair is defined as an integer pair (i, j), where i and j are both numbers原创 2017-09-11 13:55:42 · 445 阅读 · 0 评论 -
【LeetCode】88. Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.Note:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additio原创 2017-09-10 21:25:05 · 235 阅读 · 0 评论 -
【LeetCode】27. Remove Element
题解:利用两指针,一个用来更新数组一个用来遍历数组int removeElement(vector& nums, int val) { int i=0; for(int j=0;j<nums.size();j++) { if(nums[j]!=val){ nums[i]=nums[j]; i++;原创 2017-08-14 15:38:45 · 287 阅读 · 0 评论 -
【LeetCode】442. Find All Duplicates in an Array
题解:先定位好每个元素找出不同元素即可vector findDuplicates(vector& nums) { int i=0; vector res; while(i<nums.size()) { if(nums[i]!=nums[nums[i]-1])swap(nums[i],nums[nums[i]-1]); else i原创 2017-08-14 13:46:48 · 336 阅读 · 0 评论 -
【LeetCode】448. Find All Numbers Disappeared in an Array
题解:利用数组元素在1到n之间的性质把他们跟位置一一对应通过找出位置跟元素不一样的数来找到缺少的数vector findDisappearedNumbers(vector& nums) { int i=0; vector res; while(i<nums.size()) { if(nums[i]!=nums[nums[i]-1])swap(nu原创 2017-08-14 13:34:04 · 279 阅读 · 0 评论 -
【LeetCode】167. Two Sum II - Input array is sorted
题解:两指针vector twoSum(vector& numbers, int target) { int i=0,j=numbers.size()-1; vector ans(2); while(i<j) { int sum=numbers[i]+numbers[j]; if(sum<target)i++;原创 2017-08-14 11:09:01 · 192 阅读 · 0 评论 -
【LeetCode】189. Rotate Array
题解:题意是将数组向右旋转k个数注意k可能大于n必须取余,直接用reverse方法三次即可 void rotate(vector& nums, int k) { int n=nums.size(); k=k%n; reverse(nums.begin(),nums.end()); reverse(nums.begin(),nums.begin()+k);原创 2017-08-05 19:00:33 · 295 阅读 · 0 评论 -
【LeetCode】125. Valid Palindrome
题解:用两指针即可bool isPalindrome(string s) { int len=s.size(); int lt=0,rt=len-1; while(lt<rt) { while(isalnum(s[lt])==false&<<rt)lt++; while(isalnum(s[rt])==false&<<rt)rt--;原创 2017-08-05 18:22:17 · 291 阅读 · 0 评论 -
【LeetCode】4. Median of Two Sorted Arrays
题解:二分法,先转化为第k大的数,每次查找过滤掉k/2大的部分double findMedianSortedArrays(vector& nums1, vector& nums2) { int len1=nums1.size(); int len2=nums2.size(); int len= len1+len2; if(len%2){ re原创 2017-07-25 23:52:12 · 274 阅读 · 0 评论 -
【LeetCode】238. Product of Array Except Self
题解:主要用两指针的思想,左指针用来记录左边数的乘积右指针用来记录右边数的乘积并且同时计算左右两边的乘积vector productExceptSelf(vector& nums) { int n=nums.size(); int l=1,r=1; vector res(n,1); for(int i=0;i<n;i++) { res[i原创 2017-08-03 22:15:22 · 237 阅读 · 0 评论 -
【LeetCode】26. Remove Duplicates from Sorted Array
题解:本题除了用hash还可以用两指针可以节省空间复杂度。用一个指针i遍历set型数组,另一个j遍历整个数组,每次不同时i++,并让j所在数放到i下一个数上,这样可以更新i指针所指的数。 int removeDuplicates(vector& nums) { int i=0; if(nums.size()==0) return 0; for(int j=1;j<num原创 2017-08-02 23:57:28 · 257 阅读 · 0 评论 -
【LeetCode】11. Container With Most Water
题解:注意理解题意是求最大水容器,所以两条边只能选小的那条作为深度,本题算法是用两指针,要求最大面积只须两指针同时遍历即可完成O(n)复杂度int maxArea(vector& height) { int n=height.size(); int ans=0; int l=0,r=n-1; while(l<r) { ans=max(an原创 2017-08-02 23:12:36 · 224 阅读 · 0 评论 -
【LeetCode】561. Array Partition I
int arrayPairSum(vector& nums) { int n=nums.size(); int ans=0; sort(nums.begin(),nums.end()); for(int i=0;i<n;i+=2) { ans+=nums[i]; } return ans;}原创 2017-07-21 17:58:14 · 194 阅读 · 0 评论 -
【LeetCode】2. Add Two Numbers
题解:链表的遍历注意最后一位的进位,为此需要新建一个数据项class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int x=0,y=0; ListNode* p=l1; ListNode* q=l2; int ra=0; ListNode*原创 2017-07-18 11:21:22 · 219 阅读 · 0 评论 -
【LeetCode】162. Find Peak Element
class Solution {public: int findPeakElement(vector& nums) { int n=nums.size(); if(n>1&&nums[0]>nums[1]) return 0; for(int i=1;i<n-1;i++) { if(nums[i]>nums[i-1]&&nums[i]>nu原创 2017-07-21 13:03:34 · 200 阅读 · 0 评论 -
【LeetCode】119. Pascal's Triangle II
vector getRow(int rowIndex) { vector ans,tmp; ans.push_back(1); if(rowIndex<=0)return ans; for(int i=1;i<=rowIndex;i++) { tmp=ans; ans.clear(); ans.push_ba原创 2017-07-20 18:22:34 · 291 阅读 · 0 评论 -
【LeetCode】283. Move Zeroes
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.For example, given nums = [0, 1, 0, 3, 12], after calling you原创 2017-09-11 19:26:31 · 313 阅读 · 0 评论