2024年3月14号题解

2789.合并后数组中的最大元素

解题思路

  1. 如果数组是升序那么我们就可以得到最大的值,最大的元素就是整个数组的和
  2. 那么通过这个特例我们可以看出只要我们后面的数是一直在增大的,那么就一定可以成为数组中的最大元素
  3. 因此我们要从后面开始遍历整个数组,这样我们就可以得到我们的最大元素
//如果数组是升序可以得到最大的值,因此要从后面开始合并元素
long long max(long long a, long long b) {
    return a >= b? a: b;
}

long long maxArrayValue(int* nums, int numsSize){
    if (numsSize == 1) {//如果数组中只有一个元素,无法合并,那么它本省就是最大的元素
        return nums[0];
    }

    bool v[100000] = {0};//标记有那些位置被删除了
    long long a[100000];//int类型会溢出所有用long long在存一遍
    long long ans = 0;//最终的答案
    long long sum = 0;//存放累加和

    //复制一份数组
    for (int i = 0; i < numsSize; i ++) {
        a[i] = nums[i];
    }

    //从后面遍历数组
    for (int i = numsSize - 2; i >= 0; i --) {
        if (a[i] <= a[i + 1]) {//如果可以被合并
            if (!sum) {//是第一次赋值
                sum += a[i] + a[i + 1];
            }
            else {//不是第一次赋值
                sum += a[i];
            }
            a[i] += a[i + 1];//合并数组
            v[i + 1] = 1;//标记删除的位置
        }
        else {//不能合并清空sum的值
            sum = 0;
        }
        ans = max(ans, sum);//ans每次等于最大的数
    } 

    for (int i = 0; i < numsSize; i ++) {//在遍历一边数组,因为可能无法合并所以需要数组中最大的值
        if (!v[i]) {
            ans = max(ans, a[i]);
        }
    }

    return ans;
}

 

posted @ 2024-03-14 19:55  lwj1239  阅读(9)  评论(0)    收藏  举报