当前位置: 首页 > 后端技术 > PHP

笔试记录-每天统计不同种类金币的总数

时间:2023-03-29 19:06:28 PHP

问题描述每天统计不同种类金币的总数。例如输入:$data=[['time'=>'2011-11-04','type'=>1,'gold'=>100],['time'=>'2011-11-04','type'=>1,'gold'=>200],['time'=>'2011-11-04','type'=>2,'gold'=>200],['time'=>'2011-11-04','type'=>2,'gold'=>200]];输出:[['time'=>'2011-11-04','type'=>1,'gold'=>300],['time'=>'2011-11-04','type'=>2,'gold'=>400]]说明:2011-11-04类型1的金币总数为100+200=300。同理,2011-1类型2的金币总数11-04是200+200=400问题分析首先考虑在什么情况下两条记录中的金币数量可以相加?仅当两条记录具有相同的“时间”和“类型”时才添加。实现思路:判断相邻两条记录的‘时间’和‘类型’是否相同,如果相同则更新金币总数,然后继续判断‘时间’和‘类型’是否相同下一条记录是一样的。重复这个过程,直到遍历完所有记录。参考代码函数解($data){$i=0;$re=[];while($i=$arr[$j][0]){$temp[1]=max($temp[1],$arr[$j][1]);$j++;}$merged[]=$temp;$i=$j;}return$merged;}进一步抽象:如果输入是:一个二维数组,子数组的某个字段的值是有一定顺序的。例如:在每天统计不同种类金币总数的问题中,'time'和'type'字段的值是有序的,而在合并区间的问题中,则需要首先排序。问题是合并。解题模板:先求组合条件。例如:在每天统计不同种类的金币总数的问题中,只有两条记录的'时间'和'种类'相同才能合并金币的数量。判断是否可以合并相邻的两条数据,直到遍历完所有数据。代码模板:functionsolution($data){$i=0;$re=[];while($i