簡體   English   中英

Java sum算法不返回任何內容

[英]Java sum algorithm not returning anything

我正在嘗試解決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;
    }
}

問題是它沒有返回任何內容,沒有打印的語句。 有任何想法嗎?

我可以看到程序中有2處錯誤或沒有預期的錯誤(拋開它是否是解決問題的最佳方法)。

  1. 如評論中所述,對於布爾AND,應使用&&代替& &是按位與,對於整數位擺動非常有用。
  2. 您將answer聲明為數組,但不要為其創建空間。 您需要說int [] answer = new int[2]; 或類似。

我沒有運行代碼,但是如果測試程序以無輸出結束,請檢查您是否沒有收到NullPointerException(由上述#2引起)。

不要忘記空檢查和找不到正確的數字對的情況。

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");
}

查看一些修復。 記住數組初始化和數組中值可以相同的情況。

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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM