Вектор R - найти максимальное количество положительных результатов, которые можно получить из разности двух векторов. - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть два вектора

A = c(28427,19877,30709,18527,17409,14758,20873,18458,28587,17751,21672)
B = c(407,2019,10539,15430,17994,20213,21865,26217,26619,30558,31674)

без использования какой-либо внешней библиотеки, мне нужно упорядочить A и B таким образом, чтобы получить максимально возможное количество + ve результатов, полученных после различий этих два вектора.

Здесь результат должен быть 9, так как есть максимум 9 результатов, которые окажутся положительными.

Я пытался использовать метод «разделяй и властвуй», но для его решения требуется много времени и я не получаю оптимальную логику c.

1 Ответ

1 голос
/ 06 апреля 2020
a = c(28427,19877,30709,18527,17409,14758,20873,18458,28587,17751,21672)
b = c(407,2019,10539,15430,17994,20213,21865,26217,26619,30558,31674)

a_sorted <- sort(a, decreasing = T)
b_sorted <- sort(b, decreasing = T)

out <- data.frame(matrix(0, ncol = 3))
names(out) <- c("a", "b", "d")
k <- 1
j <- 1
for (i in 1:length(a)) {
  while (j <= length(a)) {
    d <- a_sorted[i] - b_sorted[j]
    # message(sprintf("i = %d; j = %d k = %d;\taa[i] = %s\tbb[j] = %s\td[k] = %s", i, j, k, a_sorted[i], b_sorted[j], d))
    if (d > 0) {
      out[k,] <- c(a_sorted[i], b_sorted[j], d)
      k <- k + 1
      j <- j + 1
      break
    }
    j <- j + 1
  }
}

out
#>       a     b     d
#> 1 30709 30558   151
#> 2 28587 26619  1968
#> 3 28427 26217  2210
#> 4 21672 20213  1459
#> 5 20873 17994  2879
#> 6 19877 15430  4447
#> 7 18527 10539  7988
#> 8 18458  2019 16439
#> 9 17751   407 17344
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...