来源: lintcode-投资结果
描述 给定一个列表funds表示投资人每次的投资额。现在有三个公司A, B, C,它们的初始资金分别为a,b,c。投资人每次投资时会对当前资金最少的公司进行投资(当有多个公司资金相同时,投资人会对编号最小的公司进行投资)。返回A, B, C三家公司最后的资金。
样例
给定funds=[1,2,1,3,1,1],a=1,b=2,c=1, 返回[4,5,4]
1 2 3 4 5 6 第一次投资时A和C的资金相同,选择对编号较小的A投资,此时a=2, b=2, c=1 第二次投资时C的资金最少,对C进行投资,此时a=2, b=2, c=3 第三次投资时A和B的资金相同,选择对编号较小的A投资,此时a=3, b=2, c=3 第四次投资时B的资金最少,对B进行投资,此时a=3, b=5, c=3 第五次投资时A和C的资金相同,选择对编号较小的A投资,此时a=4, b=5, c=3 第六次投资时C的资金最少,对C进行投资,此时a=4, b=5, c=4
给定funds=[2,1,1,1],a=1,b=2,c=2, 返回[4,3,3]
1 2 3 4 第一次投资时A的资金最少,对A进行投资,此时a=3, b=2, c=2 第二次投资时B和C的资金相同,选择对编号较小的B投资,此时a=3, b=3, c=2 第三次投资时C的资金最少,对C进行投资,此时`a=3, b=3, c=3 第四次投资时A, B和C的资金相同,选择对编号较小的`A`投资,此时a=4, b=3, c=3
解题思路 就按照最常见得思路来遍历吧,我没想到更好点的办法…
实现代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public int [] getAns(int [] funds, int a, int b, int c) { int [] arr = new int []{a, b, c}; for (int i = 0 ; i < funds.length; i++) { arr[judge(arr)] += funds[i]; } return arr; } public int judge (int [] arr) { int i = 0 ; if (arr[0 ] > arr[1 ]) { i = 1 ; } if (arr[i] > arr[2 ]) { i = 2 ; } return i; }
这道题的主要注意事项是,给a,b,c添加索引,防止真的去拿a,b,c去比较.然后再获取正确的索引方法中,也可以想办法继续优化.
完。
ChangeLog
2018-11-28 完成
以上皆为个人所思所得,如有错误欢迎评论区指正。
欢迎转载,烦请署名并保留原文链接。
联系邮箱:huyanshi2580@gmail.com
更多学习笔记见个人博客——>呼延十