溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java查找不重復無序數(shù)組中是否存在兩個數(shù)字的和為某個值

發(fā)布時間:2020-09-28 14:17:25 來源:腳本之家 閱讀:141 作者:sdr_zd 欄目:編程語言

今天去某在線教育面試面試官讓做的一道題,題目描述如下:

  1. 給定一個不重復的無序數(shù)組arr和一個定值num

  2. 查找arr中是否有兩個數(shù)的和等于num

  3. 有則返回這兩個數(shù)的下標(可能有多組, 只用返回一組), 沒有則返回null

很多人一想可能就是兩層for循環(huán),我想了很久最后寫了雙重for循環(huán)…【這個代碼太easy就不放了】然后面試官說知道哈希嗎,由于哈希查找的時間復雜度是O(1),從哈希的角度去考慮,這中間還有一堆就不描述了,說一下怎么用哈希實現(xiàn)。

實現(xiàn)思路:

將數(shù)組中的所有的值放入HashMap的Key中,Value存放該值對應的下標,遍歷這個HashMap,取得Key,計算如果可以和這個Key加起來的和為num的值,如果這個值存在,就直接返回這兩個下標。遍歷一次的時間復雜度為O(N),查找的時間復雜度是O(1),總體時間復雜度O(N)。

代碼實現(xiàn):

public class getTwoNumsSumEquals {
  public static void main(String[] args) {
    int[] arr = new int[]{3, 4, 6, 5, 9, 8};
    int num = 8;
    int[] ret = getIndex(arr, num);
    System.out.println("index of two numbers R:" + ret[0] + " " + ret[1]);
  }
  // 找到這兩個數(shù)的下標并返回(以長度為2的數(shù)組的形式返回)
  private static int[] getIndex(int[] arr, int num) {
    int[] ret = new int[2];
    HashMap<Integer, Integer> hashMap = new HashMap<>();
    int index = 0;
    // 將每個數(shù)字和其下標放進map中
    for (Integer curr : arr) {
      hashMap.put(curr, index++);
    }
   // 遍歷HashMap并判斷
    for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
      int value = entry.getKey();
      int subValue = num - value;
      if(hashMap.containsKey(subValue)) {
        // 找到啦!
        ret[0] = entry.getValue();
        ret[1] = hashMap.get(subValue);
        break;
      }
    }
    return ret;
  }
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對億速云的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI