java笔试--贪心算法

相关题目:

1029.两地调度

1605. 给定行和列的和求可行矩阵

 

两地调度

在此题中,采取的是贪心算法的思想。由于有2N个人服务两地,故先假设所有的人都前去了B地,接着有N个人从B地去了A地,没人所花费的费用为pre[A]-pre[B].所以,选取最小的前N个pre[A]-pre[B].。进行计算(差值排序)

class Solution {
    public int twoCitySchedCost(int[][] costs) {

        int[] arr=new int[costs.length];
        int res=0;
        for(int i=0;i<costs.length;i++){
            arr[i]=costs[i][0]-costs[i][1];
            res+=costs[i][1];
        }
        //对差值进行排序
        Arrays.sort(arr);
        for(int i=0;i<costs.length/2;i++){
            res+=arr[i];
        }
        return res;
    }
}

给定行和列的和求给定矩阵

思路:每一次尽量的取最大的值[因为一定会有一个解出现]  (Math.min(rowSum[i],colSum[j]))

class Solution {
    public int[][] restoreMatrix(int[] rowSum, int[] colSum) {
        /**
        使用贪心算法,采用贪心策略,每一次尽可能的去最大的值来行成一个最优解
        */
        int [][] arr=new int[rowSum.length][colSum.length];
        for( int i=0;i<rowSum.length;i++){
            for( int j=0;j<colSum.length;j++){
                arr[i][j]=Math.min(rowSum[i],colSum[j]);
                rowSum[i]-=arr[i][j];
                colSum[j]-=arr[i][j];

            }
        }
        return arr;
    }
}

 

于2020/10/13开始编辑。持续更新

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值