双指针法实现twoSum函数无法返回数组元素下标如何解决
问题原因
- 代码中返回值写的是
nums[i]、nums[j],这两个是数组对应位置的元素值,你要返回下标直接返回计数变量i和j即可。 - 额外注意:当前双指针解法的前提是输入数组已经完成升序排序,如果你的输入是未排序的原始数组,该逻辑无法适配,会出现找不到解、解错误的问题;如果需要支持未排序数组,需要先将元素和原下标绑定后再排序,或者改用哈希表遍历的方案。
修正后的代码(仅适配升序排序数组场景)
// Using Two pointers Approach class Solution { public int[] twoSum(int[] nums, int target){ // 初始化左右指针 int i = 0, j = nums.length-1; while (i<j){ if(nums[i] + nums[j] > target){ j--; }else if(nums[i] + nums[j] < target){ i++; }else{ // 直接返回下标i、j而非对应元素 return new int[] {i, j}; } } return new int[] {}; } }
内容的提问来源于stack exchange,提问作者Aditya Sahota
相关产品推荐
相关产品推荐

