App下載

經(jīng)典Java面試題解析:兩數(shù)之和

當(dāng)?shù)夭恢砬榘髴?/span> 2023-07-07 11:05:36 瀏覽數(shù) (1612)
反饋

在Java的面試中,算法題是常見的考察內(nèi)容之一。解決算法問題需要靈活的思維和良好的編程能力。本文將介紹一道經(jīng)典的Java面試題——兩數(shù)之和(Two Sum),并提供詳細(xì)的解析和解題思路。

題目

 給定一個整數(shù)數(shù)組nums和一個目標(biāo)值target,請你在該數(shù)組中找出和為目標(biāo)值的兩個整數(shù),并返回它們的數(shù)組下標(biāo)。

示例

 輸入:nums = [2, 7, 11, 15], target = 9 輸出:[0, 1] 解釋:nums[0] + nums[1] = 2 + 7 = 9,因此返回[0, 1]。

解析與解題思路

 解決兩數(shù)之和問題的一種常見方法是使用哈希表(HashMap)。下面是使用哈希表解決該問題的具體步驟:

  1. 創(chuàng)建一個空的哈希表,用于存儲數(shù)組中的元素和對應(yīng)的索引。
  2. 遍歷數(shù)組nums的每個元素,假設(shè)當(dāng)前元素為num,索引為index。
  3. 在哈希表中查找是否存在target - num的差值。如果存在,說明找到了兩個數(shù)的和等于目標(biāo)值,直接返回它們的索引。
  4. 如果哈希表中不存在target - num的差值,則將當(dāng)前元素num及其索引index添加到哈希表中。

下面是使用哈希表解決該問題的Java代碼示例:

import java.util.HashMap;
import java.util.Map;

public class TwoSum {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int complement = target - nums[i];
            if (map.containsKey(complement)) {
                return new int[]{map.get(complement), i};
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solution found.");
    }

    public static void main(String[] args) {
        TwoSum twoSum = new TwoSum();
        int[] nums = {2, 7, 11, 15};
        int target = 9;
        int[] result = twoSum.twoSum(nums, target);
        System.out.println("Indices: " + result[0] + ", " + result[1]);
    }
}

在上述代碼中,我們利用哈希表記錄每個元素的值及其對應(yīng)的索引,通過查詢哈希表中是否存在差值,來找到滿足條件的兩個數(shù)的索引。

結(jié)論

通過使用哈希表,我們可以高效地解決兩數(shù)之和的問題。這道經(jīng)典的Java面試題考察了面試者對數(shù)組遍歷、哈希表以及算法思維的理解。理解并掌握哈希表的原理和使用方式,對于解決類似的算法問題具有重要意義。在面試中,清晰地解釋算法思路和實(shí)現(xiàn)過程,展現(xiàn)出自己的編程能力和問題解決能力,將為面試成功奠定基礎(chǔ)。

 學(xué)java,就到java編程獅!


0 人點(diǎn)贊