zoukankan      html  css  js  c++  java
  • Leetcode 1014 最佳观光组合

     

      暴力法:

        public final int maxScoreSightseeingPair(int[] values) {
            int len = values.length, re = 0;
            for (int i = 0; i < len; i++) {
                //剪枝用
                int maxJ = 0;
                for (int j = i + 1; j < len; j++) {
                    if (values[j] > maxJ) {
                        maxJ = values[j];
                        re = Math.max(re, values[i] + values[j] + i - j);
                    }
                }
            }
            return re;
        }

      时间复杂度为 O(n2) 。剪枝已无可剪,继续优化需要转换遍历思路。

      对于 i,j 的得分,为 values[i]+values[j]+i-j,分解可得 (values[i]+i)+(values[j]-j)对于固定一点 j,取 values[i]+i 的最大值即可得到最高得分。

      那么对于固定的一点 j ,只需要获取坐标在起之前的最大的 values[i]+i 即可。

      顺序遍历不断的取 values[i]+i 的最大值,便可在 O(N)的时间复杂度内得到结果。

      可以这么做的前提是,i 与 j 具有先后顺序,已经体现在了 (values[i]+i)+(values[j]-j) 公式中。

        public final int maxScoreSightseeingPair2(int[] values) {
            int len = values.length, ans = 0, max = values[0];
            for (int i = 1; i < len; i++) {
                ans = Math.max(ans, max + values[i] - i);
                max = Math.max(max, values[i] + i);
            }
            return ans;
        }

      JS:

    var maxScoreSightseeingPair = function (values) {
        let re = 0, maxBegin = values[0];
        for (let i = 1; i < values.length; i++) {
            re = Math.max(re, maxBegin + values[i] - i);
            maxBegin = Math.max(maxBegin, values[i] + i);
        }
        return re;
    };

    当你看清人们的真相,于是你知道了,你可以忍受孤独
  • 相关阅读:
    java中set集合的常用方法
    Java的Collection集合的常用方法
    Java集合Collection&Map
    Linux设置中文语言的一种方式
    struts2自定义Interceptor拦截器
    Linux系统官网下载
    idea绿色版+谷歌浏览器绿色版——设置打开jsp文件
    torch.nn.Embedding
    负对数似然(negative log-likelihood)
    Pytorch系列教程-使用Seq2Seq网络和注意力机制进行机器翻译
  • 原文地址:https://www.cnblogs.com/niuyourou/p/14674853.html
Copyright © 2011-2022 走看看