Search
Duplicate
📒

[LeetCode Top 150] 02-2. Two Sum 2 - Input Array is Sorted - Medium

상태
완료
수업
Algorithm Solving
주제
LeetCode Top Interview 150
4 more properties
참고

문제해설

NOTE
입력값 ⇒ 비내림차순으로 정렬되어 있는 정수배열과, 2개 숫자의 합이 되야하는 값
출력값 ⇒ 숫자의 합을 일치시키는 2개의 숫자 값을 담은 배

문제 로직고민

NOTE
비내림차순으로 정렬되어 있으며, 조건을 만족하는 숫자쌍은 단 하나만 존재한다!
가장 작은값 + 가장 큰 값을 진행하면서 목표 숫자와 비교한다.
만약 값이 0보다 크다면 가장 큰 값보다 1단계 작은 값을 고른다.
만약 값이 0보다 작다면 가장 작은 값보다 1단계 큰 값을 고른다.
만약 값이 0이라면 정답이므로 각 idx를 +1한 값을 배열에 담아서 리턴한다.

작성코드

NOTE
class Solution { public int[] twoSum(int[] numbers, int target) { int startIdx = 0; int lastIdx = numbers.length -1; int[] result = new int[2]; while(startIdx < lastIdx){ int sum = numbers[startIdx] + numbers[lastIdx]; if(sum == target){ result[0] = startIdx + 1; result[1] = lastIdx + 1; break; } else if(sum < target) startIdx++; else lastIdx--; } return result; } }
Java
복사

정답코드

NOTE
class Solution { public int[] twoSum(int[] numbers, int target) { int req; int a; for (int index2 = 1; index2 < numbers.length; index2++) { req = target - numbers[index2]; a = Arrays.binarySearch(numbers, 0, index2, req); if (a > -1) { System.gc(); return new int[]{a + 1, index2 + 1}; } } return new int[2]; } }
Java
복사
메모리를 가장 적게 사용하는 코드
로직은 그렇게 차이 나지는 않는것같아 참고만 했다.