春节刷题day16:[LeetCode:300、5、1143、剑指Offer 04、14]

春节刷题day16:LeetCode

300. 最长递增子序列

5. 最长回文子串

剑指 Offer 04. 二维数组中的查找

剑指 Offer 14- I. 剪绳子

1143. 最长公共子序列


1、300. 最长递增子序列

class Solution {
    
    
public:
    int lengthOfLIS(vector<int>& nums) {
    
    
        int len = nums.size();
        int a[len], tot = 0;
        a[tot++] = nums[0];
        for(int i = 1; i < len; i++){
    
    
            if(nums[i] > a[tot - 1]) a[tot++] = nums[i];
            else{
    
    
                *lower_bound(a, a + tot, nums[i]) = nums[i];
            }
        }
        return tot;
    }
};

2、5. 最长回文子串

class Solution {
    
    
public:
    int checka(int pos, string s){
    
    
        for(int i = pos; i >= 0; i--){
    
    
            int r = pos + 2 + pos - i;
            if(r >= s.size()) return i + 1;
            if(s[i] == s[pos + 2 + pos - i]) continue;
            else return i + 1;
        }
        return 0;
    }
    int checkb(int pos, string s){
    
    
        for(int i = pos; i >= 0; i--){
    
    
            int r = pos + 1 + pos - i;
            if(r >= s.size()) return i + 1;
            if(s[i] == s[pos + 1 + pos - i]) continue;
            else{
    
    
                return i + 1; break;
            }
        }
        return 0;
    }
    string longestPalindrome(string s) {
    
    
        int len = s.size(), l, r;
        int k = 1, pos;
        string ans;
        ans = s[0];
        for(int i = 0; i < len; i++){
    
    
            pos = checka(i - 1, s);
            if(2 * (i - pos) + 1 > k){
    
    
                k = 2 * (i - pos) + 1;
                ans = s.substr(pos, k);
            }
            pos = checkb(i, s);
            if(2 * (i - pos + 1) > k){
    
    
                k = 2 * (i - pos + 1);
                ans = s.substr(pos, k);
            }
        }
        return ans;
    }
};

3、剑指 Offer 04. 二维数组中的查找

class Solution {
    
    
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
    
    
        int l = matrix.size();
        if(!l) return false;
        int r = matrix[0].size();
        int i = 0, j = r - 1;
        while(i < l && j >= 0){
    
    
            if(target > matrix[i][j]) i++;
            else if(target < matrix[i][j]) j--;
            else return true;
        }
        return false;
    }
};

4、剑指 Offer 14- I. 剪绳子

class Solution {
    
    
public:
    int cuttingRope(int n) {
    
    
        if(n == 2) return 1;
        else if(n == 3) return 2;
        else if(n == 4) return 4;
        else if(n == 5) return 6;
        else{
    
    
            int k = n % 3;
            if(!k) return (int)pow(3, n / 3);
            else if(k == 1) return (int)pow(3, n / 3 - 1) * 4;
            else return (int)pow(3, n / 3) * 2;
        }
        return 0;
    }
};

5、1143. 最长公共子序列

class Solution {
    
    
public:
    int longestCommonSubsequence(string text1, string text2) {
    
    
        int len1 = text1.size(); int len2 = text2.size();
        int a[len1 + 3][len2 + 3];
        memset(a, 0, sizeof a);
        for(int i = 1; i <= len1; i++){
    
    
            for(int j = 1; j <= len2; j++){
    
    
                if(text1[i - 1] == text2[j - 1]) a[i][j] = a[i - 1][j - 1] + 1;
                else a[i][j] = max(a[i - 1][j], a[i][j - 1]);
            }
        }
        return a[len1][len2];
    }
};

2021/2/22完结。

猜你喜欢

转载自blog.csdn.net/shangzhengyu/article/details/113926158
今日推荐