216. Combination Sum III
https://leetcode.com/problems/combination-sum-iii/
class Solution {
private:
vector>res;
public:
vector> combinationSum3(int k, int n) {
vectornums;
combination(nums,k,n,1);
return res;
}
void combination(vector &nums,int k,int n,int t){
if(k<=0 || n<=0){
if(k==0 && n==0) res.push_back(nums);
else return;
}
for(int i=t;i<=9;i++){
nums.push_back(i);
combination(nums,k-1,n-i,i+1);
nums.pop_back();
}
}
};
209. Minimum Size Subarray Sum
https://leetcode.com/problems/minimum-size-subarray-sum/
class Solution {
public:
int minSubArrayLen(int s, vector& nums) {
int len = nums.size(), start = 0, sum = 0;
int minlen = len+1;
for (int i = 0; i < len; i++) {
sum += nums[i];
while (sum >= s) {
minlen = min(minlen, i - start + 1);
sum -= nums[start++];
}
}
return minlen == len+1 ? 0 : minlen;
}
};
18. 4Sum
https://leetcode.com/problems/4sum/
class Solution {
private:
vector>res;
public:
vector> fourSum(vector& nums, int target) {
int len = nums.size();
sort(nums.begin(),nums.end());
for(int i=0;i0&&nums[i]==nums[i-1]&&ii+1&&nums[j]==nums[j-1]&&jj+1 && nums[k]==nums[k-1] && ktarget)
l--;
else
k++;
}
}
}
return res;
}
};
31. Next Permutation
https://leetcode.com/problems/next-permutation/
class Solution {
public:
void nextPermutation(vector& nums) {
int len = nums.size(),i,j;
for(i=len-2;i>=0;i--)
if(nums[i]i;j--)
if(nums[j]>nums[i]) break;
if(i>=0) swap(nums[i],nums[j]);
reverse(nums.begin()+i+1,nums.end());
}
};
162. Find Peak Element
https://leetcode.com/problems/find-peak-element/
class Solution {
public:
int findPeakElement(vector& nums) {
int len = nums.size();
int st = 0,en = len-1;
while(stnums[mid+1]) en = mid;
else st = mid+1;
}
return en;
}
};
289. Game of Lifeclass Solution {
public:
void gameOfLife(vector>& board) {
int m = board.size();
if(m==0)return;
int n = board[0].size();
if(n==0)return;
for(int i=0;i>&board,int x,int y){
int cnt=0,m=board.size(),n=board[0].size();
for(int i=x-1;i<=x+1;i++)
for(int j=y-1;j<=y+1;j++){
if(i==x&&j==y)continue;
if(i>=0&&i=0&&j3)board[x][y]=3;
else board[x][y]=1;
}
else{
if(cnt==3) board[x][y]=2;
else board[x][y]=0;
}
}
};
153. Find Minimum in Rotated Sorted Array
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array/
class Solution {
public:
int findMin(vector& nums) {
int len = nums.size();
int l=0,r=len-1;
while(l<=r){
int m=(l+r)/2;
if(nums[m]nums[m]? nums[0]:nums[r];
else l=m;
}
}
return nums[l];
}
};
152. Maximum Product Subarrayclass Solution {
public:
int maxProduct(vector& nums) {
assert (!nums.empty());
int curMax = nums[0], curMin = nums[0], res = nums[0];
for (int i = 1; i < nums.size(); ++i) {
int mx = curMax,mn=curMin;
curMax = max(max(mx * nums[i], mn * nums[i]), nums[i]);
curMin = min(min(mx * nums[i], mn * nums[i]), nums[i]);
res = max(res, curMax);
}
return res;
}
};
268. Missing Numberhttps://leetcode.com/problems/missing-number/
class Solution {
public:
int missingNumber(vector& nums) {
sort(nums.begin(),nums.end());
int len =nums.size();
int left=0,right=len-1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid]==mid)left=mid+1;
else right=mid-1;
}
return left;
}
};
122. Best Time to Buy and Sell Stock II
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/
class Solution {
public:
int maxProfit(vector& prices) {
int Profit=0,len=prices.size();
for(int i=1;iprices[i-1])Profit+=prices[i]-prices[i-1];
}
return Profit;
}
};
120. Triangleclass Solution {
public:
int minimumTotal(vector>& triangle) {
int m = triangle.size(),minum = INT_MAX;
for(int i=0;i
34. Search for a Range
class Solution {
public:
vector searchRange(vector& nums, int target) {
int len = nums.size();
int l = 0,r = len-1;
while(l<=r){
int m = (l+r)/2;
if(nums[m]target) r = m-1;
else{
int s=m,e=m;
while(s>=1&&nums[s-1]==nums[m])s--;
while(e+1re = {s,e};
return re;
}
}
vectorre = {-1,-1};
return re;
}
};
35. Search Insert Position
class Solution {
public:
int searchInsert(vector& nums, int target) {
int len = nums.size();
int l = 0 , r = len-1;
while(l<=r){
int m = (l+r)/2;
if(nums[m]target) r = m-1;
else return m;
}
return l;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTree(vector& inorder, vector& postorder) {
int len = inorder.size();
return helper(inorder,postorder,0,len-1,0,len-1);
}
TreeNode* helper(vector& inorder,vector& postorder,int i,int j,int ii,int jj)
{
if(i >j || ii >jj)
return NULL;
int mid = postorder[jj];
auto f = find(inorder.begin() + i,inorder.begin() + j+1,mid);
int dis = f - inorder.begin() - i;
TreeNode* root = new TreeNode(mid);
root -> left = helper(inorder,postorder,i,i + dis-1,ii,ii + dis-1);
root -> right = helper(inorder,postorder,i + dis + 1,j,ii + dis,jj - 1);
return root;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* buildTree(vector& preorder, vector& inorder) {
int len = preorder.size();
return helper(preorder,inorder,0,len,0,len);
}
TreeNode* helper(vector& preorder, vector& inorder,int i,int j, int ii,int jj){
if(i>=j||ii>=jj)return NULL;
int mid = preorder[i];
auto f = find(inorder.begin()+ii,inorder.begin()+jj,mid);
int dis = f-inorder.begin()-ii;
TreeNode* root = new TreeNode(mid);
root->left = helper(preorder,inorder,i+1,i+dis+1,ii,ii+dis);
root->right = helper(preorder,inorder,i+dis+1,j,ii+dis+1,jj);
return root;
}
};
class Solution {
public:
vector> subsetsWithDup(vector& nums) {
vector> res = {{}};
int len = nums.size();
sort(nums.begin(),nums.end());
for(int i=0; i re = res[k];
for(int j=0; j
39. Combination Sum
class Solution {
private:
vector>res;
void helper(vectorcan,vector&re,int target,int sum,int t){
if(t>=can.size()||target> combinationSum(vector& candidates, int target) {
vectorre;
sort(candidates.begin(),candidates.end());
helper(candidates,re,target,0,0);
return res;
}
};
11. Container With Most Water
class Solution {
public:
int maxArea(vector& height) {
int contain=0,len=height.size();
int left=0,right=len-1;
while(leftcon? contain:con;
if(height[left]>height[right]) right--;
else left++;
}
return contain;
}
};