leetcode-array
文章平均质量分 63
varcom
这个作者很懒,什么都没留下…
展开
-
229. Majority Element II
摩尔投票法class Solution {public: vector majorityElement(vector& nums) { int n=nums.size(); vector res; if(n==0) return res; int m1=nums[0];原创 2016-09-07 15:03:53 · 165 阅读 · 0 评论 -
162. Find Peak Element
题意是返回任意一个peak element 都可以class Solution {public: int findPeakElement(vector& nums) { int n=nums.size(); if(n<=1) return 0; int i;原创 2016-09-03 15:38:00 · 151 阅读 · 0 评论 -
167. Two Sum II - Input array is sorted
二分搜索class Solution {public: vector twoSum(vector& numbers, int target) { int n=numbers.size(); int l=0,r=n-1; vector ans{1,2}; while(l<r) { i原创 2016-09-03 13:33:58 · 156 阅读 · 0 评论 -
122. Best Time to Buy and Sell Stock II
动态规划,dp[i]=max(dp[i-1],dp[k]+prices[i]-nums[k+1]),k+1>=0&&k+1class Solution {public: int maxProfit(vector& prices) { int n=prices.size(); if(n==0) return 0;原创 2016-09-03 13:19:23 · 144 阅读 · 0 评论 -
119. Pascal's Triangle II
class Solution {public: vector getRow(int rowIndex) { vector cur{1}; int i,j; for(i=1;i<=rowIndex;i++) { for(j=cur.size()-1;j>0;j--) cu原创 2016-09-03 11:21:05 · 134 阅读 · 0 评论 -
118. Pascal's Triangle
class Solution {public: vector> generate(int numRows) { vector> res; vector row; if(numRows==0) return res; row.push_back(1); res.原创 2016-09-03 10:59:53 · 198 阅读 · 0 评论 -
90. Subsets II
递归,若当前元素不如栈,则后面与它相同的元素都不如栈class Solution {public: void subset(vector& nums,int sta,vector>& res,vector ans) { if(sta>=nums.size()) { res.push_back(ans);原创 2016-09-03 00:09:40 · 180 阅读 · 0 评论 -
79. Word Search
记忆化搜索class Solution {public: int dis[4][2]={ {-1,0}, {0,1}, {0,-1}, {1,0} }; void DFS(vector>& board,int row,int col,string word,int sta,bool& tag,bool v原创 2016-09-03 00:00:48 · 172 阅读 · 0 评论 -
74. Search a 2D Matrix
二分class Solution {public: int search(vector vt,int target,bool& tag) { int l=0,r=vt.size()-1; tag=false; if(target<vt[l]) return -1; while(l<=r)原创 2016-09-02 23:57:40 · 136 阅读 · 0 评论 -
75. Sort Colors
将后面的值与前面小于它的值交换class Solution {public: void sortColors(vector& nums) { int n=nums.size(); int i,j; for(j=n-1,i=0;j>i;j--) { if(nums[j]==0)原创 2016-09-02 22:27:12 · 278 阅读 · 0 评论 -
73. Set Matrix Zeroes
方法一将第一行和第一列作为标记。matrix[i][j]==0,将matrix[i][0]和matrix[0][j]设为0,所以matrix[0][0]要单独考虑,也要最后遍历class Solution {public: void setZeroes(vector>& matrix) { int n=matrix.size(); if(n==0)原创 2016-09-02 22:19:30 · 1040 阅读 · 0 评论 -
81. Search in Rotated Sorted Array II
方法一是线段树,查找区间最值struct segTree{ int l,r; int v; int m;};void build(segTree tree[],int index,int l,int r,vector& nums){ tree[index].l=l; tree[index].r=r; if(l==r) {原创 2016-09-02 21:51:37 · 148 阅读 · 0 评论 -
153. Find Minimum in Rotated Sorted Array
每次都与nums[0]比较,若nums[mid]>nums[0]说明最小值在mid右边class Solution {public: int findMin(vector& nums) { int n=nums.size(); if(n==1) return nums[0]; int l=0,r=n-1;原创 2016-09-04 11:11:47 · 153 阅读 · 0 评论 -
154. Find Minimum in Rotated Sorted Array II
class Solution {public: int findMin(vector& nums) { int n=nums.size(); if(n==1) return nums[0]; int l=0,r=n-1; while(l<r) { int mid原创 2016-09-04 13:51:27 · 136 阅读 · 0 评论 -
209. Minimum Size Subarray Sum
双指针,start和end之间维护一段>=s的数列,class Solution {public: int minSubArrayLen(int s, vector& nums) { int n=nums.size(); int sum=0,start=0,end=0; int m=n+1; while(end<n)原创 2016-09-04 15:28:30 · 178 阅读 · 0 评论 -
287. Find the Duplicate Number
应用快慢指针思想class Solution {public: int findDuplicate(vector& nums) { int n=nums.size(); int fast=0; int slow=0; while(1) { slow=nums[slow];原创 2016-09-07 14:35:55 · 176 阅读 · 0 评论 -
381. Insert Delete GetRandom O(1) - Duplicates allowed
使用unordered_map和unordered_set存取class RandomizedCollection {public: /** Initialize your data structure here. */ RandomizedCollection() { mp.clear(); } /** Inserts a valu原创 2016-09-07 09:55:39 · 287 阅读 · 0 评论 -
380. Insert Delete GetRandom O(1)
等概率得到随机数应用了蓄水池抽样算法,假定默认选中第一个,之后第m 个被选中的概率是1/mclass RandomizedSet {public: /** Initialize your data structure here. */ RandomizedSet() { st.clear(); } /** Inserts a valu原创 2016-09-06 23:48:58 · 165 阅读 · 0 评论 -
289. Game of Life
class Solution {public: void gameOfLife(vector>& board) { int row=board.size(); if(row==0) return; int col=board[0].size(); int i,j,k; int dis[原创 2016-09-06 20:50:40 · 141 阅读 · 0 评论 -
238. Product of Array Except Self
该位置的积=左边的积*右边的积class Solution {public: vector productExceptSelf(vector& nums) { int n=nums.size(); int i; vector output; int P=1; output.push_ba原创 2016-09-06 19:59:40 · 140 阅读 · 0 评论 -
228. Summary Ranges
class Solution {public: vector summaryRanges(vector& nums) { int n=nums.size(),i; vector ranges; if(n==0) return ranges; string tmp="";原创 2016-09-06 16:50:29 · 159 阅读 · 0 评论 -
268. Missing Number
因为数据从0~n,所以sum(0~n) -sum(vector)class Solution {public: int missingNumber(vector& nums) { int n=nums.size(); int sum=0; for(int i=0;i<n;i++) sum+=nums[i];原创 2016-09-06 16:09:02 · 211 阅读 · 0 评论 -
283. Move Zeroes
class Solution {public: void moveZeroes(vector& nums) { int n=nums.size(); int k=0; for(int i=0;i<n;i++) { if(nums[i]==0) k++;原创 2016-09-06 15:57:38 · 132 阅读 · 0 评论 -
126. Word Ladder II
BFS+DFSclass Solution {public: map> buildTree( string beginWord, string endWord,原创 2016-09-04 22:13:47 · 252 阅读 · 0 评论 -
216. Combination Sum III
递归回溯class Solution {public: void Sum(int k,int n,int tot,int sta,vector>& res,vector& ans) { if(tot>n||ans.size()>k) return; if(tot==n&&ans.size()==k) {原创 2016-09-04 15:56:09 · 192 阅读 · 0 评论 -
72. Edit Distance
动态规划class Solution {public: int minDistance(string word1, string word2) { int dp[1000][1000]; int m=word1.size(); int n=word2.size(); int i,j; memset(dp,原创 2016-09-13 22:40:23 · 243 阅读 · 0 评论 -
80. Remove Duplicates from Sorted Array II
class Solution {public: int removeDuplicates(vector& nums) { int n=nums.size(); int k=0; int cnt=1; sort(nums.begin(),nums.end()); for(int i=1;i<n;i++)原创 2016-09-01 22:20:28 · 148 阅读 · 0 评论 -
39. Combination Sum
回溯class Solution {public: void Getans(vector& nums,int sta,vector>& res,int cur,vector ans,int target) { if(cur==target&&ans.size()>0) { res.push_back(ans);原创 2016-08-31 09:53:51 · 167 阅读 · 0 评论 -
33. Search in Rotated Sorted Array
这里只会有两种情况原创 2016-08-30 23:31:52 · 156 阅读 · 0 评论 -
34. Search for a Range
二分搜索,在找最左端,要找的目标值小于target,所以最后必定left指向最左端,right指向最左端的前一个数字,同理,最右端class Solution {public: vector searchRange(vector& nums, int target) { int n=nums.size(); int left=0,right=n-1,m原创 2016-08-30 20:30:46 · 198 阅读 · 0 评论 -
35. Search Insert Position
二分查找class Solution {public: int searchInsert(vector& nums, int target) { int n=nums.size(); int left=0,right=n-1; while(left<=right) { int mid=(left+原创 2016-08-30 19:57:04 · 168 阅读 · 0 评论 -
11. Container With Most Water
使用线段数,先枚举一条边作为较小的一条边,再找左边比它大和最右边比它大的边,两者的较大值就是以这条边为较短边的最大面积,构建和查询线段数的时间是log(n),总的时间是nlog(n)class Solution {struct segTree{ int l,r; int v; segTree* left,*right; segTree(int val):v(v原创 2016-08-30 15:36:16 · 148 阅读 · 0 评论 -
18. 4Sum
枚举第一个数和最后一个数,中间两个数二分查找class Solution {public: vector> fourSum(vector& nums, int target) { int n=nums.size(); int i,j,k,t; sort(nums.begin(),nums.end());原创 2016-08-29 23:21:59 · 333 阅读 · 0 评论 -
16. 3Sum Closest
枚举+二分搜索class Solution {public: int threeSumClosest(vector& nums, int target) { int n=nums.size(); int i,j,k; int ans=nums[0]+nums[1]+nums[2]; sort(nums.begin(),n原创 2016-08-29 22:42:39 · 293 阅读 · 0 评论 -
15. 3Sum
先枚举前两个数,再看第三个数在不在,在这里主要需处理好重复的问题,所以先排好序,若第一个数字相同,跳过,若第二个数字想同,也跳过class Solution {public: vector> threeSum(vector& nums) { int n=nums.size(); int i,j,k,length; int ans;原创 2016-08-29 22:03:42 · 272 阅读 · 0 评论 -
26. Remove Duplicates from Sorted Array
class Solution {public: int removeDuplicates(vector& nums) { int n=nums.size(); int i,k=0,length=n; for(i=1;i<n;i++) { if(nums[i]==nums[i-1-k])原创 2016-08-29 20:16:01 · 274 阅读 · 0 评论 -
27. Remove Element
class Solution {public: int removeElement(vector& nums, int val) { int n=nums.size(); int i,k=0,len; for(i=0;i<n;i++) { if(nums[i]==val)原创 2016-08-29 20:09:00 · 268 阅读 · 0 评论 -
31. Next Permutation
从最后第二个开始往前遍历,找到第一个并非大于后面数据的数,进行交换,因为最大的数据必定是维持整个数列单调递减class Solution {public: void nextPermutation(vector& nums) { int n=nums.size(); vector:: iterator it,jt; int tmp;原创 2016-08-29 20:01:41 · 278 阅读 · 0 评论 -
40. Combination Sum II
回溯,因为每个数字只能出现一次,所以当下一个数字和当前数字相同时,若当前数退出时,下一个数不需要进栈了class Solution {public: void GetRes(vector& nums,int sta,vector>& res,int sum,vector ans,int target) { if(sum==target&&ans.size()>原创 2016-08-31 10:48:35 · 152 阅读 · 0 评论 -
42. Trapping Rain Water
取一条左边的较高边,再往右找一条>=左边的边,或者左边最高的边class Solution {public: int trap(vector& height) { int n=height.size(); int i=0,j,left,right; int ans=0; while(i<n&&height[i]==0)原创 2016-08-31 18:13:17 · 167 阅读 · 0 评论