нужна помощь в написании решении и проверки задачи по Scala
есть задача с условием, как ее решить и написать проверку?
Условие : Данные массив целых чисел ‘nums’ и целое число ‘target’ Необходимо вернуть массив из двух чисел из массива ‘nums’ таких, что их сумма равна target Если таких числе нет, то вернуть массив Array(-1,-1). Условие1: 2 <= nums.length <= 10000; Условие: -2^31 <= nums(i) <= 2^31 - 1; Условие: -2^31 <= target <= 2^31 -1
Def twoSum(nums: Array[int], target: Int): Array[Int] = {
Array.empty[Int]
}
assert(twoSum(Array(1,2,3),3).sorted.sameElements(Array(1,2)))
assert(twoSum(Array(1,2,3),5).sorted.sameElements(Array(2,3)))
assert(twoSum(Array(1,2,3),4).sorted.sameElements(Array(1,3)))
assert(twoSum(Array(1,2,3),6).sorted.sameElements(Array(-1,-1)))
assert(twoSum(Array(1,9,1),2).sorted.sameElements(Array(1,1)))
assert(twoSum(Array(1,9,1),10).sorted.sameElements(Array(1,9)))
assert(twoSum(Array.tabulate(1000)(! => i + 1),
9999 + 10000).sorted.sameElements(Array(9999,10000)))
assert(twoSum(Array.tabulate(10000)(I => i + 1), 10000 + 10001).sorted.sameElements(Array(-1,-1)))
}
Ответы (1 шт):
Примерное решение в вашем комментарии правильное, только нет теле цикла ключевого слова return:
def twoSum(nums: Array[Int], target: Int): Array[Int] = {
for (
i <- nums.indices;
j <- (i + 1) until nums.length if nums(i) + nums(j) == target
) return Array(nums(i), nums(j))
Array(-1, -1)
}
Таким образом, функцию вернёт результат, как только найдёт первую подходящую пару. Если же не найдёт, то вернёт последнее выражение функции, то есть Array(-1, -1).
По поводу проверок - зависит от выбранной вами библиотеки для написания проверок. Чаще всех мне попадалась https://www.scalatest.org/ . Приведённый вами пример проверок тоже вполне себе подходит.