明天早上10点有字节跳动的笔试,所以就去牛客网上找了往年的笔试编程题来看看,就看了两道
https://www.nowcoder.com/test/8537209/summary
一道是《用户喜好》,一道是《手串》。
总结:其实这两道题有类似的地方,就是Map<Integer,List<Integer>> (符号表)
《用户喜好》题是统计在一个区间内喜好程度为k个用户个数,常规的思路是
for(int i=l;i<r;I++)
if(a[i]==k)
count++;
但是如果需要反复查询多次的话,这样的时间复杂度会很高,超出了题目要求的时间
所以可以换一种思路,用一个符号表(Map<Integer,List<Integer>>)来记录喜好程度为k的用户的位置
然后再根据位置判断是否属于
for ( int location:map.get(k))
if(location 在 [l,r]中)
count++;
这样换一种思路之后,查询一个区间内为k值个数的速度就加快了
第二道题《手串》也可以用这种方法解决,就是用一个Map<Integer,List<Integer>>来存储输入
然后再根据,list里面的相邻位置的距离是否超过m值,来判断该种颜色是否合法,记得考虑手串是循环的!
总结下来,就是今天学了Map<Integer,List<Integer>> , 这个东西挺好用的
拓展:是否可以用这个map实现python里面Series的value_count