有序数组元素首尾位置查找:方法参数不匹配编译错误排查
问题分析与解决
错误根源
编译错误的核心原因是LeetCode判题系统默认调用的方法签名和你定义的不匹配:
- 你定义的
searchRange需要3个参数:int[] nums, int target, boolean findStart - 但LeetCode题目要求的对外方法是
int[] searchRange(int[] nums, int target),判题时只会传递两个参数,因此出现「实参和形参列表长度不匹配」的错误。
解决方案
把你写的search方法重命名为searchRange(符合题目要求的方法名),同时将原来的三参数searchRange改为私有辅助方法,避免外部调用冲突。
修正后的代码
class Solution { // 私有辅助方法,用于内部二分查找首尾位置 private int searchRangeHelper(int[] nums, int target, boolean findStart) { int ans = -1; int start = 0; int end = nums.length - 1; while (start <= end) { int mid = start + (end - start) / 2; if (target < nums[mid]) { end = mid - 1; } else if (target > nums[mid]) { start = mid + 1; } else { ans = mid; if (findStart) { end = mid - 1; } else { start = mid + 1; } } } return ans; } // 符合LeetCode要求的对外方法,方法名和参数都匹配 public int[] searchRange(int[] nums, int target) { int[] result = {-1, -1}; int start = searchRangeHelper(nums, target, true); int end = searchRangeHelper(nums, target, false); result[0] = start; result[1] = end; return result; } // 本地测试用main方法,LeetCode判题不会执行 public static void main(String[] args) { int[] nums = {5, 7, 7, 8, 8, 10}; int target = 8; int[] result = new Solution().searchRange(nums, target); // 修正打印方式,直接打印数组会输出地址,需要遍历或用Arrays.toString System.out.println(java.util.Arrays.toString(result)); } }
额外注意点
- 原代码的
main方法需要改为static,否则无法直接调用;同时打印数组时要用Arrays.toString(),否则会输出数组的内存地址而非实际元素。 - 辅助方法改为
private后,只能在类内部调用,避免被外部错误调用。
内容的提问来源于stack exchange,提问作者Madhiha Shaik
相关产品推荐
相关产品推荐

