国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

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

2024-07-14 08:43:25
字體:
來源:轉載
供稿:網友

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

  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;  }}

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉木乃县| 孟州市| 古交市| 永吉县| 青川县| 慈溪市| 雅江县| 广丰县| 汉川市| 孝昌县| 昌乐县| 米易县| 措美县| 洪湖市| 临武县| 海淀区| 永胜县| 尚志市| 灵台县| 镇赉县| 博白县| 福州市| 收藏| 齐齐哈尔市| 报价| 沁阳市| 卫辉市| 湘阴县| 前郭尔| 连城县| 海盐县| 焦作市| 大同市| 吴旗县| 新巴尔虎右旗| 五大连池市| 凤翔县| 青海省| 南郑县| 阿拉善左旗| 淅川县|