Day2 用两个栈实现队列+连续子数组的最大和+数组中的逆序对

2021-06-09  本文已影响0人  吃掉夏天的怪物

剑指 Offer 09. 用两个栈实现队列(简单)

简单但没做对,下次需要仔细想一下细节

class CQueue {
    stack<int> stack1,stack2;
public:
    CQueue() {
        while (!stack1.empty()) {
            stack1.pop();
        }
        while (!stack2.empty()) {
            stack2.pop();
        }
    }
    
    void appendTail(int value) {
        stack1.push(value);
    }
    
    int deleteHead() {
        // 如果第二个栈为空
        if (stack2.empty()) {
            while (!stack1.empty()) {
                stack2.push(stack1.top());
                stack1.pop();
            }
        } 
        if (stack2.empty()) {
            return -1;
        } else {
            int deleteItem = stack2.top();
            stack2.pop();
            return deleteItem;
        }
    }
};

剑指 Offer 42. 连续子数组的最大和(简单)

简单但没一下想出来

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int res = INT_MIN;
        int sum = 0;
        for(auto it:nums){
            sum = sum > 0?sum+it:it;
            res = max(res,sum);
        }
        return res;

    }
};

剑指 Offer 51. 数组中的逆序对(困难)

不会不会不会 ❗ 这次就只学归并的方法
求逆序对,和数组的大小有关,所以可以边排序边计算个数

class Solution {
public:
    int chat(vector<int>&nums, vector<int>& temp,int l,int r){
        if(l >= r) return 0;
        int mid = l + (r-l)/2;
        int res = chat(nums,temp,l,mid) + chat(nums,temp,mid+1,r);
        for(int k = l; k <= r; k++){
            temp[k] = nums[k]; 
        }
        int i = l;
        int j = mid+1;
        for(int k = l; k <= r; k++){
            if(i == mid+1){nums[k] = temp[j++];}
            else if(j == r+1){nums[k] = temp[i++];}
            else{
                if(temp[i] > temp[j]){
                    nums[k] = temp[j++];
                    res += mid-i+1;
                }else{
                    nums[k] = temp[i++];
                }
            }
        }
        return res;
    }
    int reversePairs(vector<int>& nums) {
        int n = nums.size();
        if(n <= 0) return 0;
        vector<int> temp(n);
        return chat(nums,temp,0,n-1);

    }
};
上一篇下一篇

猜你喜欢

热点阅读