LeetCode打卡(1)

今天又开始的新一轮的打卡,就从简单题目开始吧。

数组拆分 I
https://leetcode-cn.com/problems/array-partition-i/submissions/

是一个很有意思的贪心题目,难度很小。
但是证明他的过程可以使用动态规划的方法进行。
但是这次的动态规划,我们从最复杂的情况向着最简单的情况进行思考。

假设这是一个排好序列的2n个元素个数的数组,我们考虑每次可以获得的最大的数字,必定是小于等于排好序的元素的次大数字。采用贪心策略,则取得这个可能的最大数字。接着,将序列的最大数字与之凑成一个元组。

则此时将序列中已经凑成元组的元素舍去,剩下的元素构成了2(n-1)个元素的数组。可以进行依次递归。

代码:

class Solution {
    
    
public:
    int arrayPairSum(vector<int>& nums) {
    
    
        int n=size(nums);        
        sort(nums.begin(),nums.end());
        int  sum=0;
        for(int i=0;i<n;i++){
    
    
            if(i%2==0)
            sum+=nums[i];
        }
        return sum;
    }
};

最大连续1的个数:
https://leetcode-cn.com/problems/max-consecutive-ones/
思路:
1、找连续的话,必定有头和尾巴,那么这样更新的话,比累加的普通算法要看起来优美,想起来容易。
2、或者直接模拟计算。

class Solution {
    
    
public:
    int findMaxConsecutiveOnes(vector<int>& nums) {
    
    
        int start=-1;
        int n=size(nums);
        int now=0;
        int res=0;
        int temp=0;
        for(int i=0;i<n;i++){
    
    
            if(nums[i]) continue;
            else{
    
    
                now=i;
                temp=now-start-1;
                start=now;
                if(temp>res) res=temp;
            }
        }
        if(nums[n-1]!=0&&n-start-1>res) res=n-start-1;
        return res;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_47741017/article/details/113823415