Java如何实现方法接收{1,2,3,45}格式输入为数组并查找多余元素
正确实现方案
原代码问题
你现有的代码核心问题出在循环逻辑:
- 首次循环无论当前位置元素是否相等都会直接返回结果,根本不会遍历后续元素,仅在两个数组第一个元素不同、或多出的元素恰好是长数组最后一位的场景下能得到正确结果,其他场景全部报错。
修复后的排序对比方案
如果你要沿用排序后逐个对比的思路,调整逻辑如下:
import java.util.Arrays; public class Solution { public static int solution(int[] x, int[] y) { int[] shorter = x.length > y.length ? y : x; int[] longer = x.length > y.length ? x : y; Arrays.sort(shorter); Arrays.sort(longer); for (int i = 0; i < shorter.length; i++) { if (shorter[i] != longer[i]) { return longer[i]; } } // 遍历完短数组所有元素都相等,说明多出的元素在长数组末尾 return longer[longer.length - 1]; } }
更优的异或运算方案
排序方案的时间复杂度是O(n log n),可以用异或特性优化到O(n)时间复杂度、O(1)空间复杂度:
- 相同整数异或结果为0,0和任何整数异或结果为该整数本身
- 把两个数组的所有元素做异或运算,最终结果就是唯一多出来的元素
代码如下:
public class Solution { public static int solution(int[] x, int[] y) { int res = 0; for (int num : x) { res ^= num; } for (int num : y) { res ^= num; } return res; } }
关于输入的说明
你方法的入参已经定义为int[]类型,题目说明输入直接提供,你不需要手动加new int[]前缀,调用侧会传入符合格式的数组参数,只需要保证方法内部逻辑正确即可。
内容的提问来源于stack exchange,提问作者Aditya W
相关产品推荐
相关产品推荐

