leetcode学習記録
leetcode学習記録12
二つの数およびII
難易度:簡単
所与の順序付けられた配列は、それらの合計が目標数の和に等しくなるように2つの数値を見つけるために応じて昇順にソートされています。
関数は、インデックス1のINDEX2未満でなければならない2つのインデックス値からindex1のINDEX2を返す必要があります。
説明:
インデックス(index1と、INDEX2と)の戻り値はゼロではありません。
あなたは、各入力のみ唯一の答えに対応すると仮定することができますが、同じ要素を再利用することはできません。
例:
入力:番号= 2、7、 11、15]、目標= 9
出力:[1,2]
説明:2および7は、ターゲット番号9の和に等しいです。したがってインデックス1 = 1、INDEX2 = 2。
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
問題解決のためのアイデア
1.暴力、2サイクル、及び2つのターゲットを見つける
シフトが少ないヘッドポインタを超える場合2.二重ポインタ、頭部と尾部、及び目標と比較し、テール・ポインタは、予めより大きい場合、出力は同じです
コード
//方法一
class Solution {
public int[] twoSum(int[] numbers, int target) {
for(int i = 0; (numbers[i] <= target)&&(i < numbers.length-1); i++){
for(int j = i+1; j < numbers.length; j++){
if(numbers[i] + numbers[j] == target){
return new int[]{i + 1, j + 1};
}
}
}
return null;
}
}
//方法二
class Solution {
int right = 0;
int left = numbers.length-1;
while(right < left){
if(numbers[right] + numbers[left] ==target){
return new int[]{right + 1, left + 1};
}
else if(numbers[right] + numbers[left] < target){
right++;
}
else{
left--;
}
}
return null;
}
}