H公司面试准备

最长上升子序列问题(LIS, LeetCode 300)

class Solution {
public:
    // O(N^2) Solution.
    int lengthOfLIS1(vector& nums) {
        int dp[nums.size()+1], res=0;
        for(int i=0;inums[j]) dp[i]=max(dp[i], dp[j]+1);
                }
            }
            res=max(res, dp[i]);
        }
        return res;
    }

    // O(N^log(N)) Solution.
    int lengthOfLIS2(vector& nums) {
        int dp[nums.size()+1], len=0, mid, l, r;
        for(int i=0;idp[len]) dp[++len]=nums[i];
            else {
                l=1, r=len;
                while(l

N皇后问题(LeetCode 52)

class Solution {
public:
    int total=0;
    bool is_ok(int row, int* c) {
        for(int j=0;j

找到序列中的局部最大值(LeetCode 162)

class Solution {
public:
    int findPeakElement(vector& nums) {
        if(nums.size()==1) return 0; 
        int l=0, r=nums.size()-1, mid;
        while(l<=r) {
            if(nums[l]>=nums[l+1]) return l;
            if(nums[r]>=nums[r-1]) return r;
            mid=(l+r)/2;
            if(nums[mid]>nums[mid-1]) l=mid;
            else if(nums[mid]

大数求根

class Solution {
public:
    int mySqrt(int x) {
        int l=1, r=x, mid;
        while(l<=r) {
            mid=(l+r)/2;
            if(mid==x/mid) return mid;
            else if(mid

你可能感兴趣的:(数据结构与算法,C++)