剑指offer006-排序数组中两个数字之和 题目 给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。
函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。 numbers 的下标 从 0 开始计数 ,所以答案数组应当满足 0 <= answer[0] < answer[1] < numbers.length 。
假设数组中存在且只存在一对符合条件的数字,同时一个数字不能使用两次。
示例 1:
输入: numbers = [1,2,4,6,10], target = 8
输出: [1,3]
解释: 2 与 6 之和等于目标数 8 。因此 index1 = 1, index2 = 3 。
示例 2:
输入: numbers = [2,3,4], target = 6
输出: [0,2]
示例 3:
输入: numbers = [-1,0], target = -1
输出: [0,1]
提示:
2 <= numbers.length <= 3 * 104
-1000 <= numbers[i] <= 1000
numbers 按 递增顺序 排列
-1000 <= target <= 1000
仅存在一个有效答案
## 思路
这个双指针,就不说了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Solution { public int [] twoSum(int [] numbers, int target) { int left = 0 ; int right = numbers.length - 1 ; while (left < right) { int s = numbers[left] + numbers[right]; if (s < target) { left += 1 ; } else if (s > target) { right -= 1 ; } else { return new int []{left, right}; } } return new int []{0 , 0 }; } }
1 2 3 解答成功: 执行耗时:0 ms,击败了100.00% 的Java用户 内存消耗:38.6 MB,击败了61.05% 的Java用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 BfsUploadResult iconUploadResult = null; try { iconUploadResult = bfsService.upload(APP_ICON, info.getPackageName() + "_icon.gif" , IOUtils .to ByteArray(info .getIconInputStream () )); } catch (Exception e) { LOGGER . error("upload icon failed:" + Throwables . getStackTraceAsString(e ) ); setFailed("上传app图标失败" ) ; return null; } finally { IOUtils . closeQuietly(info .getIconInputStream () ); } if (iconUploadResult == null) { setFailed("上传app图标失败" ) ; return null; } return iconUploadResult.getUrl() ;