diff --git a/docs/notes/57.1 和为 S 的两个数字.md b/docs/notes/57.1 和为 S 的两个数字.md index 3a0a8f29..01ee3b42 100644 --- a/docs/notes/57.1 和为 S 的两个数字.md +++ b/docs/notes/57.1 和为 S 的两个数字.md @@ -1,27 +1,29 @@ # 57.1 和为 S 的两个数字 -[NowCoder](https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&tqId=11195&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) +## 题目链接 + +[牛客网](https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&tqId=11195&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) ## 题目描述 -输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。 +在有序数组中找出两个数,使得和为给定的数 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。 ## 解题思路 使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。 -- 如果两个指针指向元素的和 sum == target,那么得到要求的结果; +- 如果两个指针指向元素的和 sum == target,那么这两个元素即为所求。 - 如果 sum > target,移动较大的元素,使 sum 变小一些; - 如果 sum < target,移动较小的元素,使 sum 变大一些。 ```java -public ArrayList FindNumbersWithSum(int[] array, int sum) { - int i = 0, j = array.length - 1; +public ArrayList FindNumbersWithSum(int[] nums, int target) { + int i = 0, j = nums.length - 1; while (i < j) { - int cur = array[i] + array[j]; - if (cur == sum) - return new ArrayList<>(Arrays.asList(array[i], array[j])); - if (cur < sum) + int cur = nums[i] + array[j]; + if (cur == target) + return new ArrayList<>(Arrays.asList(nums[i], nums[j])); + if (cur < target) i++; else j--; diff --git a/notes/57.1 和为 S 的两个数字.md b/notes/57.1 和为 S 的两个数字.md index 3a0a8f29..01ee3b42 100644 --- a/notes/57.1 和为 S 的两个数字.md +++ b/notes/57.1 和为 S 的两个数字.md @@ -1,27 +1,29 @@ # 57.1 和为 S 的两个数字 -[NowCoder](https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&tqId=11195&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) +## 题目链接 + +[牛客网](https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b?tpId=13&tqId=11195&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) ## 题目描述 -输入一个递增排序的数组和一个数字 S,在数组中查找两个数,使得他们的和正好是 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。 +在有序数组中找出两个数,使得和为给定的数 S。如果有多对数字的和等于 S,输出两个数的乘积最小的。 ## 解题思路 使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。 -- 如果两个指针指向元素的和 sum == target,那么得到要求的结果; +- 如果两个指针指向元素的和 sum == target,那么这两个元素即为所求。 - 如果 sum > target,移动较大的元素,使 sum 变小一些; - 如果 sum < target,移动较小的元素,使 sum 变大一些。 ```java -public ArrayList FindNumbersWithSum(int[] array, int sum) { - int i = 0, j = array.length - 1; +public ArrayList FindNumbersWithSum(int[] nums, int target) { + int i = 0, j = nums.length - 1; while (i < j) { - int cur = array[i] + array[j]; - if (cur == sum) - return new ArrayList<>(Arrays.asList(array[i], array[j])); - if (cur < sum) + int cur = nums[i] + array[j]; + if (cur == target) + return new ArrayList<>(Arrays.asList(nums[i], nums[j])); + if (cur < target) i++; else j--;