已知每日交易的用户id和日期。统计每天,用户id第一次出现的id个数。
c#提供Dictionary<>解决键值对问题。
难点:
1、思路一:先将日期由小到大排序,再将每个日期所对应的用户id需要从数据库中取出,放入数据结构中便于统计这个用户id是否是第一次出现的。若将用户id放入数组或者链表中,从数据库中读取到一个用户id就得顺序查询已保存的数组。查询效率为O(n),但是再加上数据库中的n个数据,所以要完成所以数据的id第一次出现得需要O(n*n)。效率低。
解决:
使用C#的Dictionary<>键值对,键存储用户id。值存储日期。
原因:1、键存用户id是为了从数据库中查询一条用户id后,可以拿新用户id在Dictionary中根据key来快速找到,因为key的查询效率为O(1)。
2、值放日期,可以保证在查询到key后,将新的用户id所对应的时间与已经保存在Dictionary中value的时间进行比较,将小的日期存入。
这样整个用户id及最早出现时间的保存只需要O(n)
保存以后遍历Dictionary。新定义一个Dictionary res,key放日期,value放这个日期下用户id的个数。
1、将日期提取出来,如果res的key包含了这个日期,就找到以后再value+1.若没有包含,就添加这个key到res中,value设为1.