Поиск суммы двух элементов в массиве целых чисел и возвращение индексов первого совпадения двух элементов работают для некоторых и не работают для немногих - PullRequest
1 голос
/ 07 июня 2019

У меня есть вопрос, в котором мы должны пройти массив и найти индексы двух элементов, которые совпадают с любым заданным значением.

Я запускаю вложенный цикл для массива и параллельно проверяю суммудва элемента и возвращает индекс обоих элементов, если он совпадает с ответом

class Solution {
    public int[] twoSum(int[] nums, int target) {

        int ans[] = new int[2];
        int sum=0;
        int index=0;

myloop: for (index=0; index < nums.length; index++) {
             for (int index2 = index + 1 ; index2 < nums.length - 1; index2++) {
                sum = nums[index] + nums[index2];

                if (sum == target) {
                    ans[0]= index;
                    ans[1]= index2;
                    break myloop;
                }

                sum=0;
            }
        }

        return ans;
    }
}

Это работает в нескольких случаях и не работает в нескольких, я получаю неправильный вывод.Любой совет?

1 Ответ

2 голосов
/ 07 июня 2019

Неверное условие внутреннего цикла index2 < nums.length - 1, оно должно быть index2 < nums.length. Например, если вам дают

nums = {1, 2, 3, 4} target = 7

Ваш текущий код

for (index=0; index < nums.length; index++) {
   for (int index2 = index + 1 ; index2 < nums.length - 1; index2++) {
       ...
   }

никогда не будет тестировать 3 + 4.

Почему все эти sum и ans?

public int[] twoSum(int[] nums, int target) {
  for (int i = 0; i < nums.length; ++i) 
    for (int j = i + 1; j < nums.length; ++j) 
      if (nums[i] + nums[j] == target) 
        return new int[] {i, j};   // we've found it! Let's return it 

  return new int[0]; // let's return an empty array, not {0, 0} one  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...