怎么推广自己的网站?,建设网站和备案,茶叶网页设计素材,建设厅技工在哪个网站上查询目录 题目描述#xff1a;输入#xff1a;输出#xff1a;代码实现#xff1a;1.二分#xff08;折半#xff09;查找2.双指针向内缩进 题目描述#xff1a; 给你一个下标从 1 开始的整数数组 numbers #xff0c;该数组已按 非递减顺序排列 #xff0c;请你从数组中找… 目录 题目描述输入输出代码实现1.二分折半查找2.双指针向内缩进 题目描述 给你一个下标从 1 开始的整数数组 numbers 该数组已按 非递减顺序排列 请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] 则 1 index1 index2 numbers.length 。 以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。 你可以假设每个输入 只对应唯一的答案 而且你 不可以 重复使用相同的元素。 你所设计的解决方案必须只使用常量级的额外空间。 输入
numbers [2,7,11,15], target 9输出
[1,2]解释2 与 7 之和等于目标数 9 。因此 index1 1, index2 2 。返回 [1, 2] 。
代码实现
1.二分折半查找
class Solution {public int[] twoSum(int[] numbers, int target) {int[] index new int[2];// 定义结果数组for (int i 0; i numbers.length; i) {// 从头开始依次假定第一个元素int left i 1;// 查找假定元素左边区间的第一个元素int right numbers.length - 1;// 左边区间的最后一个元素while (left right) {// 在区间内查找另外一个满足要求的元素int mid (right - left) / 2 left;// 取区间中的中间元素if (numbers[mid] target - numbers[i]) {// 如果满足查找元素目标值-假定元素则记录结果跳出循环index[0] i 1;index[1] mid 1;break;} else if (numbers[mid] target - numbers[i]) {// 查找元素比目标大右边界收缩right mid - 1;} else {// 查找元素比目标小左边界收缩left mid 1;}}}return index;// 返回结果}
}2.双指针向内缩进
class Solution {public int[] twoSum(int[] numbers, int target) {int low 0;// 定义左指针int high numbers.length - 1;// 定义右指针while (low high) {// 左指针要大于右指针if (numbers[low] numbers[high] target) {// 如果求和满足目标值直接返回其索引数组return new int[] { low 1, high 1 };} else if (numbers[low] numbers[high] target) {// 如果如果大于了目标值右指针回退high--;} else {// 如果小于目标值左指针进一low;}}return new int[] { -1, -1 };// 没有命中目标值的情况}
}