王老头

导航

IT系统题

对于一个整数数组A,Bk是数组A顺时针旋转k个位置后的数组,定义函数F为:

F(k) = 0*Bk[0] + 1*Bk[1] + ... + (n-1)*Bk[n-1].

计算函数F的最大值。

例子:

A = [4,3,2,6]

F(0) = (0*4) + (1*3) + (2*2) + (3*6) = 25

F(1) = (0*6) + (1*4) + (2*3) + (3*2) = 16

F(2) = (0*2) + (1*6) + (2*4) + (3*3) = 23

F(3) = (0*3) + (1*2) + (2*6) + (3*4) = 26

F(3)的值最大,因此输出为26.

 

代码如下:

Public class Main{
    public static void main(String[] args){
        int arr = {4,3,2,6};
        int max = 0;
        System.out.println(max);        
    }
    public static int rotate(int[] arr){
        int max = 0;
        int Fvalue[] = new int[arr.length];
        for(int i=0;i<arr.length;i++){
            Fvalue[i]=getSum(i,arr);
        }
        for(int i=0;i<arr.length;i++){
            if(max < Fvalue[i]){
                max = Fvalue[i];
            }
        }
        return max;
    }       
    public static int getSum(int i,int[] arr){
        int sum = 0;
        for(int m=0;n=0;m<arr.length;m++,n++){
            if(i==0){
                int tmp = m;
                sum += n*arr[tmp];
            }else{
                int tmp = (arr.length-i+m+arr.length)%arr.length;
                sum += n*arr[tmp];
            }
        }
        return sum;
    }
}

 

posted on 2018-10-09 21:18  王老头  阅读(105)  评论(0)    收藏  举报