首页 > 解决方案 > 两个 sum return 语句不返回任何内容

问题描述

我正在尝试解决一个问题,即我必须在数组中添加两个元素以等于目标整数值。我认为我的代码是正确的,并且会返回所需的目标,但是 return 语句没有返回任何值。为什么会这样,我该如何解决?

谢谢

public static void main(String[] args) {
    int[] nums= {2,7,11,15};
    int target= 9;
    
}
    public int twoSum(int[] nums, int target) {
        int result=0; 
        for(int i = 0; i<nums.length ;i++){
            for(int j=i+1; j<nums.length ;j++ ){
                result = nums[i] + nums[j];
                if (result == target){
                  return result;
                }else{
                    break;
                }
            }
        }
    
        
        
    }
}

标签: javafor-loopreturnconditional-statements

解决方案


break被错误地使用。此外,您必须return result. 我不确定这段代码是否可以编译。是吗?你也必须调用 method twoSum(...)。我看到您的数组已排序,这意味着您实际上可以O(n)通过使用两个指针来及时解决问题:leftright,如下所示:

import java.util.Arrays;

class Solution {
    
    // O(n) time, O(1) space
    private static boolean twoNumberSum(int[] array, int sum) {
        if (array.length < 2) {
            return false;
        }
        int left_idx = 0;
        int right_idx = array.length - 1;
        
        // O(n) time, O(1) space
        while (left_idx < right_idx) {
            int currentSum = array[left_idx] + array[right_idx]; 
            if (currentSum < sum) {
                left_idx++;
            }
            else if (currentSum > sum) {
                right_idx--;
            }
            else {
                return true;
            }
        }
        return false;
    }

    public static void main(String ...args) {
        int[] array = {2, 7, 11, 15};
        int valid_sum = 9;
        int invalid_sum = 10;
        
        System.out.format("(%s, %d) -> %b\n", Arrays.toString(array), valid_sum, Solution.twoNumberSum(array, valid_sum));
        System.out.format("(%s, %d) -> %b\n", Arrays.toString(array), invalid_sum, Solution.twoNumberSum(array, invalid_sum));
    }
}

另一种对未排序数组有用的解决方案是使用哈希集 -> O(n) 时间,O(n) 空间。


推荐阅读