LeetCode 1 : 두 개의 숫자와 두 합계

주제 :

정수의 배열을 지정해 nums및 목표 값을 target, 그리고 당신의 배열의 목표 값 찾기 두 개의 정수, 그리고 그들의 배열 첨자로 돌아갑니다.

각 입력이 하나의 답에 해당하는 것으로 가정 할 수 있습니다. 그러나 같은 배열 요소를 다시 사용할 수 없습니다.

정수의 배열을 지정해, 반환 지수 가 특정 대상을 추가하도록 두 숫자를.

각 입력이있을 것이라고 가정 할 수 정확히 하나의 솔루션을, 당신은 사용할 수 없습니다 같은 두 요소를.

예 :

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

문제 해결 아이디어 :

  • 무차별 각 요소를 통하여 외부 루프 x의 값이있는 경우, 내부 루프가 알아낼 target - x대상 요소는 동일한 대상 요소의 인덱스와 동일하다 X 반환한다. O의 시간 복잡도는 (N ^ 2)의 효율은 너무 낮은 전달된다.

  • 해시 : 해시 맵 (지도, DICT), 키 요소를 저장 값은 요소의 인덱스를 저장합니다.

    • 두 순회있어서지도 해시 모든 요소 및 그 인덱스의 보존을 통해 처음으로 상기 제 2 패스 조회 target - x대상 요소와 동일

    • 순회 방법 : 경우 y = target - x, 다음 x = target -y값이 있는지 찾기 위해 해시 맵을 통과하는 동안, 시간이 저장 target - x대상 요소 같음.

      例:nums = [2, 11, 7, 15], target = 9, hashmap = { }
      遍历:
      i = 0: target - x = 9 - 2 = 7, 7 不存在于 hashmap 中,则 x(2) 加入 hashmap, hashmap = {2 : 0}
      i = 1: target - x = 9 - 11 = -2, -2 不存在于 hashmap 中,则 x(-2) 加入 hashmap, hashmap = {2 : 0, 11 : 1}
      i = 2: target - x = 9 - 7 = 2, 2 存在于 hashmap 中,则返回列表 [2, 0]

코드 :

두 탐색 (자바) :

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {//一次遍历转换成键值对,key为元素值,value为索引值
            map.put(nums[i], i);
        }
        for (int i = 0; i < nums.length; i++) {//二次遍历查找符合条件的元素
            int res = target - nums[i];
            if (map.containsKey(res) && map.get(res) != i) {//查找到的目标元素不能为其本身
                return new int[]{i, map.get(res)};
            }
        }
        return null;
    }
}

탐색 (자바) 번 :

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int res = target - nums[i];
            if (map.containsKey(res)) {//因为自身元素还未加入到 hashmap,无需 map.get(res) != i 条件判断
                return new int[]{i, map.get(res)};
            }
            map.put(nums[i], i);//未找到目标元素则将其加入 hashmap
        }
        return null;
    }
}

트래버스 (파이썬) :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = {}
        for i, num in enumerate(nums): #枚举 nums 数组
            if num in dic:
                return [dic[num], i]
            else:
                dic[target-num] = i

파이썬은 인덱스 사용 문제 해결 방법의 배열되어 있습니다 :

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i, num in enumerate(nums):
            if target-num in nums and nums.index(target-num) != i:
                return [i, nums.index(target-num)]

list.index () :

설명 :

인덱스 () 함수는 목록에서 첫 번째 일치하는 인덱스 값의 위치를 ​​찾기 위해 사용된다.

구문 :

인덱스 () 메소드 구문 :

list.index(x, start, end)

매개 변수 :

  • x-- 개체를 찾을 수 있습니다.
  • 시작 위치를 찾기 위해, 옵션 start--.
  • 찾을 선택 끝 위치를 end--.

반환 값 :

이 방법은 개체가 예외가 발생 찾을 수없는 경우, 객체의 위치를 ​​찾기 위해 인덱스를 반환합니다.

버그를 작성하는 ... 사랑 : 마이크로 채널 대중 숫자에 오신 것을 환영합니다 관심
나는 Bug.png를 작성하는 사랑

추천

출처www.cnblogs.com/zhangzhe532/p/11687832.html