本文主要是介绍leetcode 2789.合并后数组中的最大元素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题也是一道思考题,也就是贪心。
思路:如果你从头开始考虑遍历的话,其实是不合理的,因为无论如何你都可能会碰坑,因为累加总有比前面的数大的时候。还有一点,就是你想,是合并的少好,还是合并的多好呢?那肯定是合并的多要好,所以我们需要尽可能的多合并元素。
通过上面两个问题的思考,我们可以得出这样的一个结论,那就是我们需要从后往前进行遍历合并,这样才能保证nums[i+1]>=nums[i]这个条件最大限度的使用。上文也说过了,也就是一直累加的话总有一回是比数组元素要大的,所以从后往前遍历进行合并也就相当于把比较大的数全部放到了前面了,这样可以最多的进行合并元素。
注意:还需要合理运用nums[i+1[>=nums[i]这个条件,当我们碰到比较大的数的时候,就以它为起点进行累加,一直往返就行了。
上代码:
class Solution {
public:long long maxArrayValue(vector<int>& nums) {int n=nums.size();long long sum=nums.back();//以数组最后一个元素为起点进行合并for(int i=nums.size()-2;i>=0;i--){if(nums[i]<=sum){//判断能不能作为起点进行合并,也就是前面的数大还是后面的数大的区分sum+=nums[i];//可以就进行合并操作}elsesum=nums[i];//不行说明前面的数大,需要用前面的数作为起点合并}return sum;}
};
这篇关于leetcode 2789.合并后数组中的最大元素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!