之前朋友面試遇到的一道題,說是給定一個整數數組和一個目標值,請你在該數組中找出和為目標值的那兩個整數的索引,而且只能用一次循環。當時我就想在遍歷的時候保存它的差值,然后和后面的數字作比較。但是內會兒只是有思路,沒寫出來,今天抽時間用代碼實現了,話不多說,直接上代碼。
public static int[] twoSum(int[] arrays, int target) { Map<Integer, Integer> map = new HashMap<>();//創建一個map for (int i = 0; i < arrays.length; i++) { int cha = target-arrays[i]; if (map.containsKey(cha)){//拿插值和map中的鍵比較,會返回boolean值 return new int [] {map.get(cha),i};//如果條件滿足,意味着找到數字了,通過get(key)方法獲得value。也就是該數字的下標 } map.put(arrays[i],i);//保存到map中,數字作為鍵,下標作為值 } throw new IllegalArgumentException("沒有找到!!!"); }