주제 :
정수의 배열을 지정해 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--.
반환 값 :
이 방법은 개체가 예외가 발생 찾을 수없는 경우, 객체의 위치를 찾기 위해 인덱스를 반환합니다.
버그를 작성하는 ... 사랑 : 마이크로 채널 대중 숫자에 오신 것을 환영합니다 관심