Nano Hash - криптовалюты, майнинг, программирование

Что за ошибка в приведенном ниже коде? не получить ожидаемый результат

Учитывая массив целых чисел и целое число k, выясните, существуют ли в массиве два различных индекса i и j, такие что nums[i] = nums[j] и абсолютная разница между i и j не превосходит k.

Пример 1: Ввод: nums = [1,2,3,1], k = 3 Вывод: true

Пример 2: Ввод: nums = [1,0,1,1], k = 1 Вывод: true

object Solution {
  def containsNearbyDuplicate(nums: Array[Int], k: Int): Boolean = { 
    for (i <- 0 until nums.length - 2) {
       for (j <- i until nums.length - 1) {
         if (nums(i) == nums(j) && (j - i == k)) return true
       }
    }
    return false
  }
}

Ваш ввод [1,2,3,1] 3 Вывод false Ожидаемое значение true



Ответы:


1

Я не думаю, что вы оцениваете всю длину внутреннего списка.

Как написано, j никогда не будет равно 3.

Я думаю, что если вы заставите свой внутренний цикл читать for (j <- i until nums.length), это должно сработать.

Вероятно, нужно исправить и внешний цикл. В противном случае i никогда не достигнет значения 3, хранящегося в вашем массиве.

Использование until исключает, поэтому, если вы используете i <- 0 until nums.length -1, где длина равна 3, тогда значение i будет 0, 1, 2 и конец.

Если вы хотите вычесть -1, потому что это кажется вам проще или имеет больше смысла, то вы, вероятно, захотите использовать i <- 0 to nums.length - 1.

В противном случае i <-0 until nums.length приведет к тому, что значение i будет равно 0, 1, 2, 3 по мере прохождения цикла for.

Надеюсь, это поможет.

05.03.2021

2

Это функционально, эффективно, поскольку O (n) вместо O (n ^ 2) и исправляет ошибку (i != j). У вас всегда должен быть отрицательный случай при тестировании;)

import math.{min, max}
def containsNearbyDuplicate(nums: Array[Int])(k: Int): Boolean = {
  val indexesToCheck = for {
    i <- 0 until nums.length
    j <- max(0, i - k) to min(nums.length - 1, i + k)
    if i != j
  } yield (i, j)
  indexesToCheck.exists {case (i, j) => nums(i) == nums(j)}
}

containsNearbyDuplicate(nums = Array(1, 2, 3, 1, 5))(k = 3)
containsNearbyDuplicate(nums = Array(1, 2, 3, 1, 5))(k = 2)
containsNearbyDuplicate(nums = Array(1, 0, 1, 1, 5))(k = 1)
05.03.2021
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..