剑指offer03数组中重复的数字
描述:
找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
思路:
找重复的值用Set集合很好
(1)定义出一个HashSet
(2)遍历数组,若set包含当前i的值就返回i,否则把i放入set
(3)循环结束若还没有返回就是没有,返回-1
代码:
class Solution {
public int findRepeatNumber(int[] nums) {
HashSet<Integer> set = new HashSet<>();
for(int i : nums){
if(set.contains(i)){
return i;
}else{
set.add(i);
}
}
return -1;
}
}
剑指offer05替换空格
描述:
请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
思路:
(1)先获得字符串长度
(2)遍历一遍字符串,决定字符数组长度,先把长度初始化为0取i位置字符若为空格长度+3,否则+1
(3)创建字符数组
(4)初始化下标为0,再次遍历数组,若i位置为空格,数组3个连续下标的元素为%20,否则该下标就是字符本身
(5)利用String的valueOf(字符数组)把数组转化为字符串返回
代码:
class Solution {
public String replaceSpace(String s) {
int len = s.length();
int slong = 0;
for(int i = 0; i < len; i++){
char c = s.charAt(i);
if(c == ' '){
slong += 3;
}else{
slong++;
}
}
char[] arr = new char[slong];
int size = 0;
for(int i = 0; i < len; i++){
char c = s.charAt(i);
if(c == ' '){
arr[size++] = '%';
arr[size++] = '2';
arr[size++] = '0';
}else{
arr[size++] = c;
}
}
String str = String.valueOf(arr);
return str;
}
}