【问题标题】:TwoSums code only returning [0,0]TwoSums 代码仅返回 [0,0]
【发布时间】:2018-04-04 15:47:21
【问题描述】:

我正在练习编码问题,但我不确定为什么我的代码不起作用(我知道它的编写效率不是很高:/)

给定一个数组和一个目标数,返回数组中两个数加起来等于目标数的索引。示例:nums = [2, 7, 11, 15], target = 9,

因为 nums[0] + nums[1] = 2 + 7 = 9, 返回 [0, 1]。 (索引必须是 diff)

class Solution {
public int[] twoSum(int[] nums, int target) {
    for (int i = 0; i < nums.length; i++)
    {
        if (nums[i] <= target)
        {
            for (int j = i; j < nums.length; j++)
            {
                System.out.print(nums[i]); 
                if (nums[i] + nums[j] == target)
                {
                    return new int[]{i, j};
                }
            }
        }

    }
    return new int[]{0,0};
}
}

任何帮助将不胜感激!

【问题讨论】:

  • 索引必须不同吗?对于 14 的目标,您可以返回 [1, 1] 吗?
  • 是的,索引必须不同
  • 在这种情况下,您可以将第二个循环更改为从 j = i + 1 开始。至于您的问题,我看不到代码有任何问题,所以您可以发布您的使用情况吗? IE。你是如何调用函数的。
  • 我正在使用 leetcode 运行代码,所以我没有调用该函数 - 将其修改为 j = i +1 似乎可以解决它!至少我的输出现在与他们的匹配 - 谢谢!
  • 不客气。 :)

标签: java for-loop if-statement return


【解决方案1】:

正如您所提到的,如果这两个数字必须不同,您必须在 i + 1 中开始迭代 j

public int[] twoSum(int[] nums, int target) {
    for (int i = 0; i < nums.length; i++)
    {
        if (nums[i] <= target)
        {
            for (int j = i + 1; j < nums.length; j++)
            {
                if (nums[i] + nums[j] == target)
                {
                    return new int[]{i, j};
                }
            }
        }
    }
    return new int[]{0,0};
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多