范围已知的时候可以直接用数组搞定,否则用哈希。
数组法:
/**
*
* @title: duplicate
* @description: 查找数组中重复的数字,数字范围0~n
*/
public static int duplicate(int[] arr, int n) {
if(arr == null || arr.length<= 0) {
return 0;
}
int[] temp = new int[n+1];
for(int i = 0; i < arr.length; i++) {
if(temp[arr[i]] != 0) {
return arr[i];
}else {
temp[arr[i]] = 1;
}
}
return 0;
}
哈希法:
/**
*
* @title: duplicate
* @description: 查找数组中重复的数字
*/
public static int duplicate(int[] arr) {
if(arr == null || arr.length<= 0) {
return -1;
}
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < arr.length; i++) {
if(map.containsKey(arr[i])) {
return arr[i];
}else {
map.put(arr[i], 1);
}
}
return -1;
}
字符串中重复的字母:
/**
*
* @title: duplicate
* @description: 查找字符串中的重复字符
*/
public static char duplicate(String str) {
char[] arr = str.toCharArray();
int[] temp = new int[128];
for(int i = 0 ;i < str.length(); i++) {
if(temp[arr[i]] != 0) {
return arr[i];
}else {
temp[arr[i]] = 1;
}
}
return 0;
}