在1001個整數的陣列中找重複的數
阿新 • • 發佈:2018-12-09
一個共1001個整數的陣列,儲存的資料範圍是【1,1000】。 也就是說,其中有(至少1個)1個數是重複的,現在要求找到那個數,返回其所在的索引(在陣列中的索引)。 現在只考慮:僅僅有1個整數重複時,找出那個整數所對應的索引。應該是2個不同的索引。
import java.util.HashMap;
/**
* 共1001個整數的陣列,儲存的資料的範圍是【1,1000】
* 其中有1個數是重複的,找出那個重複的數。
* 返回的是這個數所在的索引。
* @author Feng
* 2018年9月13日下午5:45:44
*/
public class Array4 {
public static int[] demo(int[] arr) {
int[] res = new int[2];
if( arr.length <= 1 || arr == null)
throw new IllegalArgumentException("arg is exception");
if(arr.length == 2 && arr[0] == arr[1]) {
return new int[] {0,1};
}
// V為索引,K為1-1000
// 使用的思想還是:HashMap的去除重複。
/*
* 直接判斷map中是否含有該陣列中的某一個元素,如果不包含,就把該數put進去當做Key,索引當做Value。
* 如果,包含那就更簡單了,獲取到該元素對應的Value,也就是索引,存入res陣列中。
* 並且,當前的索引i也正是重複位置的索引,將其也存放在res中。
*/
HashMap<Integer, Integer> map = new HashMap<>(arr.length);
for(int i = 0; i < arr.length; i ++) {
if (! map.containsKey(arr[i])) {
map.put(arr[i], i);
} else {
res[0] = map.get(arr[i]);
res[1] = i;
}
}
return res;
}
/**
* 給整型陣列arr中,插入從start到end(包括start,不包括end)的整數。
* @param start
* @param end
* @param arr
*/
public static void insertNum(int start, int end, int[] arr) {
if(start > end) return;
for(int i = start; i < end && end <= arr.length; i++){
arr[i] = i + 1;
}
}
// 列印陣列的方法。
public static void print(int[] arr) {
for(int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
}
public static void main(String[] args) {
int[] arr = new int[1001];
// 首先,是將數存進陣列,用來對方法的測試。
insertNum(0, 990, arr);
insertNum(990, 1000, arr);
arr[1000] = 992;
arr[991] = 10;// 重複的數是10
print(arr);
int[] index = demo(arr);
System.out.println("--->"+index[0]);
System.out.println("--->"+index[1]);
}
}