学習目標:
私はあなたに異なる思考の拡張をもたらすことを望んで、私のユニークなアルゴリズムのアイデアを更新し続けます!
役に立ったら、いいね、フォロー、サポートしてください!
あなたの励ましは私を動かし続けるものです!
!!!
歴口質問銀行質問167公式リンク
学習コンテンツ:
2つの数値の合計II-入力ソートされた配列
给定一个已按照 非递减顺序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。
例1:
入力:数値= [2,7,11,15]、ターゲット= 9
出力:[1,2]
説明:2と7の合計はターゲット数値9に等しくなります。したがって、index1 = 1、index2=2です。
例2:
入力:数値= [2,3,4]、ターゲット= 6
出力:[1,3]
例3:
入力:数値= [-1,0]、ターゲット= -1
出力:[1,2]
提示:
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 非递减顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案
ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted
勉強の時間:
2022.1.16
学習出力:
アイデア1
問題解決のアイデア
ベースアドレスラウンドロビン
1.最初にベースアドレスを決定し、次にベースアドレスの背後にあるすべてのインデックスをトラバースし、毎回2つの値を追加して、見つかった場合は、
public class Solution {
public int[] TwoSum(int[] numbers, int target) {
for(int i=0;i<numbers.Length;i++){
for(int j=i+1;j<numbers.Length;j++){
if(numbers[i]+numbers[j]==target){
return new int[]{
i + 1, j + 1};
}
}
}
return new int[]{
0, 0};
}
}
アイデア2
問題解決のアイデア
ダブルポインター法
1.最初に左ポインターと右ポインターを判別し、次に2つのポインターが指すインデックスの値が目標値であるかどうかを判別します。目標値より大きい場合は、右ポインターを左に移動し、目標値よりも小さい場合は、左ポインタを右に移動します
public class Solution {
public int[] TwoSum(int[] numbers, int target) {
if (numbers == null) return null;
int i = 0, j = numbers.Length - 1;
while (i < j) {
int sum = numbers[i] + numbers[j];
if (sum == target) {
return new int[]{
i + 1, j + 1};
} else if (sum < target) {
i++;
} else {
j--;
}
}
return null;
}
}
著者:モルモットXiaohuihui
著作権は著者に帰属します。商用の再版については、著者に連絡して許可を求め、非商用の再版については、出典を示してください。