面试题刷题每日小结-4

明天早上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

猜你喜欢

转载自blog.csdn.net/qq_34525938/article/details/82533264