zoukankan      html  css  js  c++  java
  • [补题]求a[i]+a[j]+i-j的最大值,要求i<j

    题目

    如题。
    例:

    输入:
    5
    11 6 5 18 12
    输出:
    29
    

    题解

    • 思路:
      • 一直是按着(a[i]+a[j])+(i-j)想后序的思路,不应该限制住自己,应该多考虑拆的方法。正确思路是把a[i]+a[j]+i-j拆成(a[i]+i)+(a[j]-j)。
    • 解法:
      • 由于题目要求i<j,所以遍历一遍数组,把每个j的对应最大a[i]+i对应存到另一个数组里。
      • 然后再遍历一遍,求目标最大即可。
        时间复杂度:O(n).

    代码

    import java.util.Scanner;
    
    public class Main {
    	public static void main(String args[]) {
    		Scanner in=new Scanner(System.in);
    		int n=in.nextInt();
    		int[] arr=new int[n];
    		for(int i=0;i<n;++i) {
    			arr[i]=in.nextInt();
    		}
    		int maxVal=getMaxVal(arr);
    		System.out.print(maxVal);
    	}
    	
    	public static int getMaxVal(int[] arr) {
    		int[] sum=new int[arr.length];//存对应位置之前出现的最大arr[i]+i;
    		int maxSum=Integer.MIN_VALUE; 
    		for(int i=0;i<arr.length-1;++i) {
    			sum[i]=Math.max(maxSum, arr[i]+i);
    		}
    		
    		int maxAns=Integer.MIN_VALUE;//arr[j]-j+arr[i]+i ,i<j 的最大值
     		for(int j=1;j<arr.length;++j) {
    			maxAns=Math.max(maxAns, arr[j]-j+sum[j-1]);
    		}
    		return maxAns;
    	}
    }
    
  • 相关阅读:
    otto-group-product-classification-challenge(Pytorch处理多分类问题)
    F1值
    win10 安装torch
    win10 安装 scrapy
    头条 街拍
    1029 Median
    欧拉回路
    Pre-Post
    Django 安装for Python3.4
    Python 安装for Windows
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10940136.html
Copyright © 2011-2022 走看看