zoukankan      html  css  js  c++  java
  • 数学-绝对值-Reverse Subarray To Maximize Array Value

    2020-02-11 12:01:21

    问题描述:

    问题求解:

    本题的难度个人感觉还是蛮大的,主要是不容易想到O(n)的解。

    对于 ...a, [b, ... , c], d, ...,如果我们将其中的[b, ... , c]进行翻转。

    如果两线段有重复,必减小原先的值。

    如果两线段无重复,必增加原先的值,且diff为2 * gap。

    可通过如下的图进行分类讨论。

    最后,再对边界做一个处理即可。

    int inf = (int)1e9;
        public int maxValueAfterReverse(int[] nums) {
            int res = 0;
            int n = nums.length;
            int diff = 0;
            for (int i = 0; i < n - 1; i++) res += Math.abs(nums[i + 1] - nums[i]);
            
            // 端点不在两顶点
            int min = inf;
            int max = -inf;
            for (int i = 0; i <= n - 2; i++) {
                min = Math.min(min, Math.max(nums[i], nums[i + 1]));
                max = Math.max(max, Math.min(nums[i], nums[i + 1]));
            }
            diff = Math.max(diff, 2 * (max - min));
            
            // 一端点在左顶点
            for (int i = 1; i <= n - 2; i++) {
                diff = Math.max(diff, Math.abs(nums[i + 1] - nums[0]) - Math.abs(nums[i + 1] - nums[i]));
            }
            
            // 一端点在右顶点
            for (int i = 1; i <= n - 2; i++) {
                diff = Math.max(diff, Math.abs(nums[i - 1] - nums[n - 1]) - Math.abs(nums[i - 1] - nums[i]));
            }
            
            return res + diff;
        }
    

      

  • 相关阅读:
    zoj 3792 Romantic Value
    uva 563
    uva 10779 Collectors Problem 网络流
    什么是撞库,如何预防撞库攻击?
    linux install redis-cli
    python远程调试及celery调试
    python HttpServer共享文件
    python引用,浅复制,深复制
    redis 查询key数量
    ubuntu查询可用安装包
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12294489.html
Copyright © 2011-2022 走看看