[Leetcode] 1.两数之和

71 阅读1分钟

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

示例 1:

输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

输入: nums = [3,2,4], target = 6
输出: [1,2]

JAVA 版本

  • 初次解答:
class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) { // 循环的使用
            for (int j = 0; j < nums.length; j++) {
                if ((nums[i] + nums[j]) == target && i != j) {
                     System.out.println(i); // 信息输出
                     System.out.println(j);
                     System.out.println(target);
                     return new int[] {i, j}; //数组的创建, 返回值
                }
            }
        }
         throw new IllegalArgumentException("No two sum solution"); //异常
    }
}

PHP版本

class Solution {

    /**
     * @param Integer[] $nums
     * @param Integer $target
     * @return Integer[]
     */
  function twoSum($nums, $target) {

      $hashArr = [];
      // 1.创建关联数组(哈希表)
      foreach ($nums as $i=> $item) {
          $hashArr[$item] = $i;
      }

      // 2.计算结果
      foreach ($nums as $j=>$val) {
          $dvalue = $target - $val;
          if (
              array_key_exists($dvalue, $hashArr) && 
              $j != $hashArr[$dvalue] // 数组中同一个元素在答案里不能重复出现
            ) {
              return [$hashArr[$dvalue], $j];
          }
      }
    
        return [];
    }
}