[검 지 Offer] 와 s 의 두 숫자.
2739 단어 알고리즘
정렬 된 배열 과 숫자 s 를 입력 하 십시오. 배열 에서 두 개의 수 를 찾 으 면 이들 의 합 이 바로 s 입 니 다.만약 여러 쌍 의 숫자 가 s 와 같다 면, 임의의 한 쌍 을 출력 하면 된다.
예 를 들 어 설명:
예 를 들 어 배열 {1, 2, 4, 7, 11, 15} 과 숫자 15 를 입력 하 십시오.4 + 11 = 15 이기 때문에 4 와 11 을 출력 합 니 다.
문제 풀이 의 사고 방향.
우 리 는 먼저 배열 에서 두 개의 숫자 를 선택 합 니 다. 만약 그들의 합 이 입력 한 s 와 같다 면 우 리 는 찾 아야 할 두 개의 숫자 를 찾 을 수 있 습 니 다.s 보다 작 으 면?우 리 는 두 숫자의 합 이 좀 더 크 기 를 바란다.배열 이 이미 순 서 를 정 했 기 때문에 우 리 는 비교적 작은 숫자 뒤의 숫자 를 선택 하 는 것 을 고려 할 수 있다.뒤에 있 는 숫자 가 좀 크 기 때문에 두 숫자의 합 도 좀 크 면 입력 한 숫자 s 와 같 을 수 있 습 니 다.마찬가지 로 두 개의 숫자 와 입력 보다 큰 숫자 를 선택 할 때 우 리 는 비교적 큰 숫자 앞 에 있 는 숫자 를 선택 할 수 있다. 왜냐하면 배열 앞 에 있 는 숫자 가 좀 작 기 때문이다.
import java.util.ArrayList;
import java.util.List;
public class Solution {
/** * * @param data * @param sum * @return */
public static List<Integer> findNumbersWithSum(int[] data,int sum)
{
List<Integer> result = new ArrayList<Integer>(2);
if(data == null || data.length < 2)
{
return result;
}
int ahead = data.length - 1;
int behind = 0;
long curSum; // , long
while (behind < ahead) {
curSum = data[behind] + data[ahead];
if(curSum == sum)
{
result.add(data[behind]);
result.add(data[ahead]);
break;
}
else if(curSum < sum)
{
behind++;
}
else
{
ahead--;
}
}
return result;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
물체 검출의 평가 지표 IoU의 계산 방법Yolo나 SSD 등 물체 검출에서 평가 지표로 사용되는 IoU에 대해 조사했으므로 정리했습니다. IoU (Intersection over Union)는 두 영역이 얼마나 겹치는지를 나타내는 지표입니다. 두 영역의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.