数组中重复的数字
题目链接
题目描述
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
1 | Input: |
解决思路:
不消耗额外空间的办法:由于范围是在n-1内,可以循环检查每个下标的数字是否等于下标,不等于则将其与下标处的数字所在的索引互换位置,若发现重复则返回
1 | public boolean duplicate(int[] nums, int length, int[] duplication) { |
消耗额外空间的做法:使用HashSet,每次检查数字重复即可
1 | HashSet<Integer> hashSet = new HashSet<>(); |
二维数组中的查找
题目链接
题目描述
给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。
1 | Consider the following matrix: |
解题思路
由于二维数组从左上角到右下角顺序递增,因此选择从右上角开始查询,若比目标值大则向左移动,否则向下移动
1 | public boolean Find(int target, int [][] array) { |
替换空格
题目链接
题目描述
将一个字符串中的空格替换成 “%20”。
1 | Input: |
解题思路
api法
1 | return str.toString().replace(" ", "%20"); |
直接改造StringBuffer,无额外空间:
首先对stringbuffer进行扩充,每遇到一个空格便在末尾添加两个空格
并设置两个指针p1,p2分别指向扩充前的末尾和扩充后的末尾
p1不断向前移动,当遇到非空格时,p2填充并前移;当遇到空格时,p2填充%20并前移,直到p1与p2重合或p1走到初始阶段
1 | public String replaceSpace(StringBuffer str) { |