여기에 원래 제목 링크 : https://leetcode.com/problems/two-sum-less-than-k/
주제 :
배열을 지정해, A
정수와 정수의 K
최대를 반환 S
존재하도록 i < j
함께 A[i] + A[j] = S
와 S < K
. 어떤 경우에는 i, j
존재이 식을 만족하지 반환 -1.
예 1 :
입력 : A = [34,23,1,24,75,33,54,8]는 K = 60
출력 : 58
설명 :
우리는 이하 60 58 합계 (34) (24)를 사용할 수있다.
예 2 :
입력 : A = [10,20,30], K = 15
출력 : -1
설명 :
이 경우는 한 쌍의 합계 15 이하 얻는 것이 불가능이다.
노트 :
1 <= A.length <= 100
1 <= A[i] <= 1000
1 <= K <= 2000
해결 방법 :
어레이를 정렬한다. 머리와 꼬리를 가리키는 두 개의 포인터를 사용합니다. 합계를 계산합니다.
합 <K, 업데이트 고해상도 및 리터 ++는 합계를 증가합니다.
그렇지 않으면, 합계를 감소 r-- 사용.
시간 복잡도 : O (nlogn). N = A.length.
공간 : O (1).
AC 자바 :
1 개 급 솔루션 { 2 공개 INT twoSumLessThanK ( INT [] A, INT K) { 3 INT의 입술 = -1 ; 도 4 의 경우 (A == 널 || A.length == 0 ) { 5 리턴 입술; 6 } 7 8 Arrays.sort에 (A); 9 의 INT (L) = 0 ; 10 INT R = A.length-1 ; 11 일 동안 (L < R) { 12 INT의 합 = A [1] + A [R]; 13 의 경우(합 < K) { 14 입술 = Math.max (입술, 합); 15 -1- ++ ; 16 } 다른 { 17 r-- 사용 ; 18 } 19 } 20 21 복귀 입술; 22 } 23 }
비슷한 부분 배열의 제품보다 작음 K .