task01 分治

多数元素

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int tar = nums[0], times = 1;
        for(int i = 1; i < nums.size(); i++){
            if(times == 0){
                tar = nums[i];
                times = 1;
            }
            else if(nums[i] != tar)
                times--;
            else
                times++;
        }
        
        return tar;
    }
};

 

最大子序和

class Solution {
public:
    struct st{
        int ls, rs, ms, is;
    };

    int maxSubArray(vector<int>& nums) {
        return get(nums, 0, nums.size() - 1).ms;
    }

    st push(st l, st r){
        int is = l.is + r.is;
        int ls = max(l.ls, l.is + r.ls);
        int rs = max(r.rs, r.is + l.rs);
        int ms = max(max(l.ms, r.ms), l.rs + r.ls);
        return st{ls, rs, ms, is};
    }

    st get(vector<int> ar, int l, int r){
        if(l == r) return st{ar[l], ar[l], ar[l], ar[l]};
        int m = (l + r) >> 1;
        st lsub = get(ar, l, m);
        st rsub = get(ar, m + 1, r);
        return push(lsub, rsub);
    }

};

 

Pow(x, n)

class Solution {
public:
    double eps = 1e-8;
    bool eq(double x, double y){
        return x == y;
    }
    double myPow(double x, int n) {
        // if(eq(x, 0) || eq(x, 1))
        //     return x;
        // if(n == 0)
        //     return 1;
        
        int of = 0;
        
        if(n < 0){
            if(n != INT_MIN){
                n = -n;
            }
            else{
                n = INT_MAX;
                of = 1;
            }
            x = 1 / x;
        }


        double ans = 1;
        if(of)
            ans = ans * x;
        while(n){
            if(n & 1)
                ans = ans * x;
            x = x * x;
            n = n >> 1;
        }

        return ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值