春节刷题day17:[LeetCode:面试题 01.06、16.11、17.10、01.04、08.01、04.04]

春节刷题day17:LeetCode

面试题 01.06. 字符串压缩

面试题 16.11. 跳水板

面试题 17.10. 主要元素

面试题 01.04. 回文排列

面试题 08.01. 三步问题

面试题 04.04. 检查平衡性


1、面试题 01.06. 字符串压缩

class Solution {
    
    
public:
    string compressString(string S) {
    
    
        S += "#";
        string ans;
        int len = S.size();
        int l = 0;
        for(int i = 1; i < len; i++){
    
    
            if(S[i] != S[i - 1]){
    
    
                ans += S[i - 1];
                ans += to_string(i -  l);
                l = i;
            }
        }
        if(ans.size() < len - 1) return ans;
        else return S.substr(0, len - 1);
    }
};

2、面试题 16.11. 跳水板

class Solution {
    
    
public:
    vector<int> divingBoard(int shorter, int longer, int k) {
    
    
        vector<int> v;
        if(!k) return v;
        if(shorter == longer){
    
    
            v.push_back(shorter * k);
            return v;
        }
        for(int i = k; i >= 0; i--) v.push_back(i * shorter + (k - i) * longer);
        return v;
    }
};

3、面试题 17.10. 主要元素

class Solution {
    
    
public:
    int majorityElement(vector<int>& nums) {
    
    
        sort(nums.begin(), nums.end());
        int size = nums.size();
        int cnt = 0;
        for(int i = 0; i < size; i++) if(nums[i] == nums[size / 2]) cnt++;
        if(cnt > size / 2) return nums[size / 2];
        return -1;
    }
};

4、面试题 01.04. 回文排列

class Solution {
    
    
public:
    map<char, int> pa;
    bool canPermutePalindrome(string s) {
    
    
        for(int i = 0; i < s.size(); i++){
    
    
            pa[s[i]]++;
        }
        int cnt = 0;
        for(auto i : pa){
    
    
            if(i.second & 1) cnt++;
        }
        if(cnt > 1) return false;
        return true;
    }
};

5、面试题 08.01. 三步问题

class Solution {
    
    
public:
    int waysToStep(int n) {
    
    
        long long a, b, c, ans;
        if(n == 1) return 1;
        else if(n == 2) return 2;
        else if(n == 3) return 4;
        else{
    
    
            a = 1; b = 2; c = 4;
            for(int i = 4; i <= n; i++){
    
    
                ans = (a + b + c) % 1000000007;
                a = b; b = c; c = ans;
            }
            return ans;
        }
    }
};

6、面试题 04.04. 检查平衡性

/**
 * 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:
    int GetHigh(TreeNode* root){
    
    
        if(root == NULL) return 0;
        int l = GetHigh(root -> left);
        int r = GetHigh(root -> right);
        return max(l, r) + 1;
    }
    bool slove(TreeNode* root){
    
    
        if(root == NULL) return true;
        int l = GetHigh(root -> left);
        int r = GetHigh(root -> right);
        return slove(root -> left) && slove(root -> right) && abs(l - r) <= 1;
    }
    bool isBalanced(TreeNode* root) {
    
    
        return slove(root);
    }
};

2021/2/24完结(《面试题 17.10. 主要元素》这题并没有想到O(n)时间复杂度、O(1)空间复杂度的解法,等之后再仔细考虑下吧)。

猜你喜欢

转载自blog.csdn.net/shangzhengyu/article/details/114047799