春节刷题day17:[LeetCode:面试题 16.17、17.01、01.03、10.01、17.16]

春节刷题day16:LeetCode

面试题 16.17. 连续数列

面试题 17.01. 不用加号的加法

面试题 01.03. URL化

面试题 10.01. 合并排序的数组

面试题 17.16. 按摩师


1、面试题 16.17. 连续数列

class Solution {
    
    
public:
    int maxSubArray(vector<int>& nums) {
    
    
        int ans = 0, sum = 0, cnt = nums.size();
        for(int i = 0; i < nums.size(); i++){
    
    
            sum += nums[i];
            if(sum <= 0){
    
    
                sum = 0;
                cnt--;
            }
            ans = max(ans, sum);
        }
        if(!cnt){
    
    
            ans = nums[0];
            for(int i = 0; i < nums.size(); i++) ans = max(ans, nums[i]);
            return ans;
        }
        return ans;
    }
};

2、面试题 17.01. 不用加号的加法

class Solution {
    
    
public:
    int add(int a, int b) {
    
    
        while(b != 0){
    
     
            auto carry = (unsigned int)(a & b) << 1;
            a ^= b;
            b = carry;
        }
        return a;
    }
};

3、面试题 01.03. URL化

class Solution {
    
    
public:
    string replaceSpaces(string S, int length) {
    
    
        string ans;
        for(int i = 0; i < length; i++){
    
    
            if(S[i] == ' ') ans += "%20";
            else ans += S[i];
        }
        return ans;
    }
};

4、面试题 10.01. 合并排序的数组

class Solution {
    
    
public:
    void merge(vector<int>& A, int m, vector<int>& B, int n) {
    
    
        for(int i = m + n - 1; i >= 0; i--){
    
    
            if(!n || !m) break;
            if(A[m - 1] > B[n - 1]){
    
    
                A[i] = A[m - 1]; m--;
            }else{
    
    
                A[i] = B[n - 1]; n--;
            }
            if(!n || !m) break;
        }
        if(m == 0){
    
    
            for(int i = 0; i < n; i++) A[i] = B[i];
        }
    }
};

5、面试题 17.16. 按摩师

class Solution {
    
    
public:
    int massage(vector<int>& nums) {
    
    
        int ans = 0;
        int size = nums.size();
        if(size == 0) return 0;
        else if(size == 1) return nums[0];
        else if(size == 2) return max(nums[0], nums[1]);
        else{
    
    
            int a = nums[0], b = max(nums[0], nums[1]);
            for(int i = 2; i < size; i++){
    
    
                ans = max(b, a + nums[i]);
                a = b; b = ans;
            }
        }
        return ans;
    }
};

2021/2/23完结。

猜你喜欢

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