本文共 1454 字,大约阅读时间需要 4 分钟。
问题:给定一个整数数组,找到两个不同的元素Indices,使得它们的和等于一个指定的目标值。
解法一:暴力双重循环
该方法通过双重循环遍历数组,检查每一对元素之和是否等于目标值。这是一种直观且简单的方法,且不使用额外的空间。优点:空间复杂度O(1)。缺点:时间复杂度O(n²),可能在大数据量下效率低下。public int[] twoSum(int[] nums, int target) { if (nums.length < 2) { return null; } int[] result = new int[2]; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums.length; j++) { if (nums[i] + nums[j] == target && i != j) { result[0] = i; result[1] = j; return result; } } } return null;}
解法二:使用一个额外的Map辅助
这种方法通过一次遍历数组,利用哈希表记录元素和它们的索引。每次遍历时,检查目标值减去当前元素是否存在于哈希表中。如果存在,则找到对应的索引与当前索引形成结果。若不存在,则将当前元素和索引记录到哈希表中。优点:时间复杂度O(n),空间复杂度O(1)。缺点:如果存在多个相同的元素,无法记录所有可能的组合,可能导致遗漏某些解。public int[] twoSum(int[] nums, int target) { if (nums.length < 2) { return null; } int[] result = new int[2]; Mapmap = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int current = nums[i]; int complement = target - current; if (map.containsKey(complement)) { result[0] = map.get(complement); result[1] = i; return result; } else { map.put(current, i); } } return null;}
优化点总结:
结论:对于大部分情况,哈希表辅助的解法更优,且代码简洁高效。然而,若存在多重复元素或需要处理所有解的情况,可能需要结合其他方法。
转载地址:http://hoflz.baihongyu.com/