leetcode第一題java解答——二数の和two sum

8502 ワード

整数配列numsとターゲット値targetを指定します.この配列でターゲット値の2つの整数を見つけて、その配列の下付きを返します.
入力ごとに1つの答えしか対応しないと仮定できます.しかし、この配列の同じ要素を繰り返し利用することはできません.
例:
   nums = [2, 7, 11, 15], target = 9
   nums[0] + nums[1] = 2 + 7 = 9
     [0, 1]
  • 暴力法
  • class Solution {
       public int[] twoSum(int[] nums, int target) {
           int res[]=new int[2];
           for(int i=0;i<nums.length-1;i++)
       		for(int j=i+1;j<nums.length;j++)
               {
                   if(nums[i]==target-nums[j])
                   {
                       res[0]=i;
                       res[1]=j;
                   }
               }
           return res;
       }
    }
    
  • hashmapを利用して
  • を解決する.
    class Solution 
    {
       public int[] twoSum(int[] nums, int target) 
       {
      		HashMap<Integer, Integer> map = new HashMap<>();
           int res[]=new int[2];
           for (int i = 0; i < nums.length; i++)
           {
               map.put(nums[i], i);
           }
           for (int i = 0; i < nums.length; i++) 
           {
               int temp = target - nums[i];
               if (map.containsKey(temp) && map.get(temp) != i) //  hashmap   temp,        
               {
                   res[0]=i;res[1]=map.get(temp);
                           return res;
    
               }
           }
           return res;
       }
    }