Array Leetcode :Medium

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 Life
https://leetcode.com/problems/game-of-life/

class 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 Subarray
https://leetcode.com/problems/maximum-product-subarray/

class 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 Number

https://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. Triangle
https://leetcode.com/problems/triangle/

class Solution {
public:
    int minimumTotal(vector>& triangle) {
        int m = triangle.size(),minum = INT_MAX;
        for(int i=0;i
34. Search for a Range

https://leetcode.com/problems/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

https://leetcode.com/problems/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;
    }
};

106. Construct Binary Tree from Inorder and Postorder Traversal

https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/

/**
 * 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;
    }
};

105. Construct Binary Tree from Preorder and Inorder Traversal

https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/
/**
 * 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;
    }
};

90. Subsets II

https://leetcode.com/problems/subsets-ii/

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
https://leetcode.com/problems/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
https://leetcode.com/problems/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;
    }
};














你可能感兴趣的:(Leetcode)