重复数字
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
- HashMap<Integer,Boolean>,map.
containsKey(x),如果为true,代表数据重复
- HashSet<Integer>特性,set.
add(x),如果为false,代表数据重复。
- 优解O(n),O(1)。
每个数字都放到其对应下标下,如果对应下标下的值与自己相同,说明重复。
https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524?tpId=13&tqId=11203&tab=answerKey&from=cyc_github
二维数组中的查找
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
- 从左上开始遍历,依次减少一行或者一列的范围。
https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github
替换空格
将一个字符串中的空格替换成 "%20"。
- 用StringBuilder直接
.append('%20')
- 优解
先用.charAt==(i) ' '判断有几个空格,在字符串末尾加上空格个数*2的字符串大小。用于后续存储3个字符中的2个字符空间。
p1指向原字符串末尾,p2指向现字符串末尾。
依次向前遍历,不是空格p2复制p1,是空格,依次插入02%。直到遍历结束
https://www.nowcoder.com/practice/0e26e5551f2b489b9f58bc83aa4b6c68?tpId=13&tqId=11155&tab=answerKey&from=cyc_github
顺时针打印矩阵
按顺时针的方向,从外到里打印矩阵的值。
- 确定矩阵的四个边界,然后循环输出。将边界缩小,重复上述过程。
https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github
第一个只出现一次的字符位置
在一个字符串中找到第一个只出现一次的字符,并返回它的位置。字符串只包含 ASCII 码字符。
- HashMap
- 用int数组代替HashMap,
.charAt(i)作为下标
- 优解 统计3种情况,可以用2位二进制处理,即2个Byte存储出现的个数。
BitSet bs1 = new BitSet(128);
!bs1.get(c) && !bs2.get(c) 未出现过
bs1.get(c) && !bs2.get(c) 出现过一次
bs1.set(c); 设置为1,表示出现过了
https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github
引用仓库:https://github.com/CyC2018/CS-Notes/blob/master/notes/%E5%89%91%E6%8C%87%20Offer%20%E9%A2%98%E8%A7%A3%20-%20%E7%9B%AE%E5%BD%95.md
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。