当前位置: 首页 > 知识库问答 >
问题:

Java求和算法不返回任何东西

袁成化
2023-03-14

我试图解决Leetcode上的二和算法:

给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。您可以假设每个输入都有一个解决方案,并且不能两次使用同一个元素。

我想到了这个:

public class Leet {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(twoSum(new int[]{1, 2, 3, 4, 5, 6}, 2)));
    }

    public static int[] twoSum(int[] nums, int target) {
        int[] answer = null;
        int i = 0;
        for (int j = nums[i]; i < nums.length; i++) {
            for (int x : nums) {
                if (x != j & (j + x) == target) {
                    int x2 = java.util.Arrays.asList(nums).indexOf(x);
                    answer[0] = i;
                    answer[1] = x2;
                } else {
                    return nums;
                }

            }

        }
        System.out.println("leet method executed");

        return answer;
    }
}

问题是它没有返回任何内容,也没有返回打印的声明。有什么想法吗?

共有3个答案

商皓
2023-03-14

不要忘记空检查和找不到正确数字对的情况。

public static int[] twoSum(int[] numbers, int target) {
    if(Objects.isNull(numbers)){
        throw new IllegalArgumentException("numbers is not allowed to be null");
    }

    for (int a=0;a<numbers.length;a++) {
        int first = numbers[a];

        for (int b=0;b<numbers.length;b++) {
            int second = numbers[b];

            if (first + second == target && a!=b) {
                return new int[] { first, second };
            }
        }
    }
    throw new IllegalArgumentException("there has to be a matching pair");
}
缪远
2023-03-14

我可以看出程序中有两件事是错误的或不是有意的(撇开它是否是解决问题的最佳方法不谈)。

  1. 如评论中所述,您应该使用

我还没有运行代码,但是如果测试程序结束时没有输出,请检查是否没有收到NullPointerException(由上面的#2引起)。

许马鲁
2023-03-14

看到一些修复。记住数组初始化和数组中值可以相同的情况。

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] answer = null;

        for(int i=0;i<nums.length;i++) {
            int value = nums[i];

            for(int j=i+1;j<nums.length;j++) {
                int x=nums[j];
                if ((value+x)==target) {
                    answer = new int[2]; 
                    answer[0]=i;
                    answer[1]=j; 
                }
            }
        }

        System.out.println("leet method executed");

        if (answer == null) {
            return nums;
        }

        return answer;
    }
}
 类似资料:
  • 问题内容: 我有以下代码: 该文件包含以下内容: 但是由于某种原因,每次都只返回一个空列表。 代码中可能存在愚蠢的错误或错字,但我只是找不到。提前致谢。 问题答案: 你读的文件 已经 和文件指针不是在 末尾 的文件。然后调用将不会返回数据。 仅读取一次文件: 另一种选择是在重新阅读之前先回到开头: 但这只是浪费CPU和I / O时间。 最好的办法是尝试和阅读 小 数据量,或寻求到了最后,通过采取文

  • 您好,我目前正在处理HackerRank上的Java挑战,遇到了一个用我的代码无法解决的问题。 提示如下:, 给定一个字符串 s 和一个整数 k,完成该函数,以便它找到字典上长度 k 的最小和最大子字符串。 样本输入: welcometojava 3 示例输出: ava wel 最小和最大的子字符串仅基于第一个整数。因此,对于我的解决方案,我决定创建一个整数数组,并使用 String s 中每个可

  • 这是我的查看页面代码 我在codeigniter中检查codeigniter表单验证,它复制并粘贴了我的控制器,但出现了相同的错误 这是我的控制器代码 表单验证不返回任何内容和

  • 问题内容: 如果“表”没有行。什么是最简单的检查方法? 问题答案: 您可以使用mysql_num_rows($ results) 来检查是否返回了0行,或者使用以下更快的替代方法:

  • 我正在创建一个Android应用程序,它使用BLE与MCU进行通信,目前我可以使用我的应用程序与MCU建立连接,但当我试图发现并获取设备的服务时,我返回了一个空数组,并且不确定原因。 输出: 09-26 16:33:09.648 10917-10931/bamboomobile.medheadI/TAG:连接到GATT服务器。 09-26 16:33:09.648 10917-10931/bamb

  • 在过去的几天里,我们看到服务器上的JVM进入了一种状态,他们在OldGen的GC中花费了100%的CPU时间,当时: 答:他们不需要这样做,因为堆上还有足够的空间 B.他们没有回收任何东西。 通过查看堆栈跟踪并将ProcessExplorer中的ThreadID与堆栈转储中的ThreadID关联,我知道它们在GC中。每个GC线程占用大约4%的CPU。 服务器运行16 gig堆(32gig物理RAM