二受け面接必筆:BM50 2つの数字の合計

二受け面接必筆:BM50 2つの数字の合計


序文

整数の配列番号とターゲット値 target が与えられた場合、配列内の合計がターゲット値になる 2 つの数値の添え字を見つけてください。返される添え字は昇順に並べられます。
(注: 返される配列の添え字は 1 から始まり、配列内の 2 つの数値を加算することでターゲットを取得できることが保証されます)

ここに画像の説明を挿入


1. 解決策 1: ハッシュ テーブル

ハッシュ テーブルの考え方は「空間を時間と交換する」です。これは、ハッシュ テーブルがキーと値のペアを格納し、その「検索」の複雑さが O(1) であるためです。

この質問に対する具体的な解決策のアイデアは次のとおりです (図に示すように)。
ステップ 1: キーと値のペアを <value, subscript> として保存するハッシュ テーブルのハッシュマップを定義します。
ステップ 2: 配列を最初から走査します。i 番目の位置について、ハッシュ テーブルで target-nums[i] の存在を探します。存在する場合は、2 つの添字を配列に入れて戻ります。存在しない場合は、テーブルに追加してトラバースを続ける
import java.util.*;


public class Solution {
    
    
    /**
     * 
     * @param numbers int整型一维数组 
     * @param target int整型 
     * @return int整型一维数组
     */
    public int[] twoSum (int[] numbers, int target) {
    
    
        // write code here
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i = 0 ; i < numbers.length ; i++){
    
    
            if(map.containsKey(target - numbers[i])){
    
    
                return  new int[]{
    
    map.get(target - numbers[i]) + 1,i + 1};
            }
            else{
    
    
                map.put(numbers[i],i);
            }
        }      
        return new int[]{
    
    0,0};
    }
}

ここに画像の説明を挿入

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_46119575/article/details/130700263