1. 程式人生 > >在1001個整數的陣列中找重複的數

在1001個整數的陣列中找重複的數

一個共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]); } }