洛阳建站,wordpress 4.0 id不连续,做阀门网站电话,网上智慧团建系统入口1.简述
贪心法的效率非常高#xff0c;复杂度常常为O#xff08;1#xff09;#xff0c;是一种局部最优的解题方法#xff0c;而很多问题都需要求全局最优#xff0c;#xff0c;所以在使用贪心法之前需要评估是否能从局部最优推广到全局最优。
2.思路
作为算法的贪…1.简述
贪心法的效率非常高复杂度常常为O1是一种局部最优的解题方法而很多问题都需要求全局最优所以在使用贪心法之前需要评估是否能从局部最优推广到全局最优。
2.思路
作为算法的贪心它的执行过程是把整个问题分解成多个步骤在每个步骤都选取当前步骤的最优方案直到所有步骤结束在每步都不考虑对后续步骤的影响在后续步骤中也不再回头改变前面的选择
3.举例最少硬币问题
某人带着3种面值的硬币去购物假设有1元、2元、5元的面值硬币数量不限他需要支付M元请问怎么支付才能使硬币数量最少
4.思路
先拿最大的依次下去。。。。。首先要对硬币面值进行排序
每拿一次都要对剩余金额进行更新
每次都要拿最大面值的最多个进行除运算
5.代码
coins[i]是硬币面值
count[i]计数
M是所付金额可以改编成从键盘输入随机金额
public class 最少硬币问题 {public static void main(String[] args) {int M27;//需要支付的金额int[] coins {5,2,1};//硬币面值数组从大到小排序int[] resultfindMinimumCoins(M,coins);System.out.println(使用硬币数量最少得支付方式为);for(int i0;iresult.length;i) {System.out.println(面值coins[i]元的硬币使用result[i]枚);}
}public static int[] findMinimumCoins(int M,int[] coins) {int[] countnew int[coins.length];//存储每种硬币数量的数组//从面值最大的硬币开始for(int i0;icoins.length;i) {//计算当前面值硬币可以使用多少个count[i]M/coins[i];//更新剩余需要支付的金额M%coins[i];}return count;}
}
6.学习点
1核心就是写一个方法进行每次付总金额中能有多少个最大面值的个数进行计数更新剩余金额 //从面值最大的硬币开始 for(int i0;icoins.length;i) { //计算当前面值硬币可以使用多少个 count[i]M/coins[i]; //更新剩余需要支付的金额 M%coins[i]; }
2自己写一个方法时要注意要不要返回值返回什么类型的值
方法名findMinimumCoins括号中写入参数并表明参数的数据类型
方法名findMinimumCoins前面 int[] 表示该方法的返回值类型是一个int 数组----与之对应的是 int[] countnew int[coins.length]新定义的count数组也是int类型的