招行研发C题:不确定正确与否的方法

import java.util.*;

public class MainC {

    public static void swap(int[] tower, int i, int j){
        int tem = tower[i];
        tower[i] = tower[j];
        tower[j] = tem;
    }
        // 对tower调整,保证有序,复杂度O(k)
    public static void helper(int[] tower){
        for(int i = 0; tower[i] > tower[i+1];++i)
            swap(tower, i, i + 1);
        for(int i = tower.length - 1; tower[i-1] > tower[i]; --i)
            swap(tower, i - 1, i);
    }

    public static int s2(int[] tower, int k){
        int time = 0;
        int has = 0;
        Arrays.sort(tower);
        while(true){
            int presum = 0;
            int tailsum = 0;
            helper(tower);  
                        // 在保证tower有序的情况下,结果总是出现在前k个或者后k个
            if(tower[0] == tower[k-1]
                    || tower[tower.length - k] == tower[tower.length - 1]){
                return time;
            }
            for(int i = 0, j = tower.length - 1; i < k; ++i, --j){
                presum += tower[i];
                tailsum += tower[j];
            }
            if(has > 0){
                                // 不成熟的想法认为,目标就是使有序tower的前k个或后k个相同,因此选择能够最快偏向均值的策略
                double f1 = Math.abs((double)presum/k - tower[0]);
                double f2 = Math.abs((double)tailsum/k - tower[tower.length-1]);
                if(f1 > f2){
                    tower[0]++;
                    has--;
                }else{
                    tower[tower.length-1]--;
                    has++;
                }
            }else{
                tower[tower.length-1]--;
                has++;
            }
            time++;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        int[] tower = new int[n];
        for(int i = 0; i < n; ++i)
            tower[i] = sc.nextInt();
        System.out.println(s2(tower, k));
    }
}                
不确定思路正确,欢迎大佬指正
全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务