91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

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

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

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

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

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

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

實現思路:

將數組中的所有的值放入HashMap的Key中,Value存放該值對應的下標,遍歷這個HashMap,取得Key,計算如果可以和這個Key加起來的和為num的值,如果這個值存在,就直接返回這兩個下標。遍歷一次的時間復雜度為O(N),查找的時間復雜度是O(1),總體時間復雜度O(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]);
  }
  // 找到這兩個數的下標并返回(以長度為2的數組的形式返回)
  private static int[] getIndex(int[] arr, int num) {
    int[] ret = new int[2];
    HashMap<Integer, Integer> hashMap = new HashMap<>();
    int index = 0;
    // 將每個數字和其下標放進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;
  }
}

總結

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

向AI問一下細節

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

AI

车险| 天峨县| 澳门| 贡山| 新闻| 延长县| 抚州市| 石家庄市| 平江县| 沙湾县| 蒙阴县| 疏附县| 遂昌县| 西昌市| 中宁县| 东台市| 太康县| 南召县| 长宁县| 名山县| 个旧市| 奇台县| 都匀市| 黄石市| 安福县| 烟台市| 通州市| 威宁| 麻栗坡县| 岚皋县| 巢湖市| 额济纳旗| 炉霍县| 临邑县| 齐齐哈尔市| 平安县| 冕宁县| 新乐市| 阳西县| 阿拉善盟| 青神县|