1.数组中重复的数字
在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的,也不知道每个数字重复几次。请找出数组中任意一个重复的数字。
要求复杂度为 O(N) + O(1)【时间复杂度 O(N),空间复杂度 O(1)】
1.1 分析
这种数组元素在 [0, n-1] 范围内的问题,可以将值为 i 的元素调整到第 i 个位置上。
1.2 代码实现
public class duplicateNum {
public static void main(String[] args) {
int[] arr= {2,3,1,0,2,5};
int n=arr.length;
System.out.println(duplicate(arr,n));
}
public static int duplicate(int[] nums,int len) {
if(nums==null||len<=0)
return -1;
int res=-1;
for(int i=0;i<len;i++) {
while(nums[i]!=i) {
//nums中i位置的值和i不等,需要交换或者看是否是重复的数字
if(nums[i]==nums[nums[i]]) {
res=nums[i];//只用找一个
return res;
}
swap(nums,i,nums[i]);
}
}
return -1;
}
public static void swap(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
2.替换空格
将一个字符串中的空格替换成 "%20"。
2.1 分析
在字符串尾部填充任意字符,使得字符串的长度等于替换之后的长度。