如何在不触及 R 中的 -1 值的情况下按非降序对向量进行排序?
How to sort a vector in non-descending order without touching -1 values in R?
问题:
"有些人在公园里站成一排,他们中间有树,不能移动。你的任务是在不移动树的情况下,按身高非降序重新排列人。人可以要很高!"
例子
为了
a = [-1, 150, 190, 170, -1, -1, 160, 180],
输出应该是
solution(a) = [-1, 150, 160, 170, -1, -1, 180, 190].
我们基本上需要扫描这个列表,看看哪里有下降(除非它是 -1),然后找到一种方法来重新排序非 -1 元素,以便列表是非升序的。我基本上不知道从哪里开始这个问题。有人可以在 base R 中试一试并告诉我你的想法吗?
a = c(-1, 150, 190, 170, -1, -1, 160, 180)
a[a>0] = sort(a[a>0])
a
[1] -1 150 160 170 -1 -1 180 190
解释:
a>0
是获取 non-trees 值的布尔掩码:
假真真真假假真真
如果你将它应用到 a
你会得到:
#a[a>0]
150 160 170 180 190
因此,您可以使用 sort(a[a>0])
对值进行排序,并使用与布尔掩码相同的方法设置回原始向量。
a[a>0] = sort(a[a>0])
问题:
"有些人在公园里站成一排,他们中间有树,不能移动。你的任务是在不移动树的情况下,按身高非降序重新排列人。人可以要很高!"
例子
为了
a = [-1, 150, 190, 170, -1, -1, 160, 180],
输出应该是
solution(a) = [-1, 150, 160, 170, -1, -1, 180, 190].
我们基本上需要扫描这个列表,看看哪里有下降(除非它是 -1),然后找到一种方法来重新排序非 -1 元素,以便列表是非升序的。我基本上不知道从哪里开始这个问题。有人可以在 base R 中试一试并告诉我你的想法吗?
a = c(-1, 150, 190, 170, -1, -1, 160, 180)
a[a>0] = sort(a[a>0])
a
[1] -1 150 160 170 -1 -1 180 190
解释:
a>0
是获取 non-trees 值的布尔掩码:
假真真真假假真真
如果你将它应用到 a
你会得到:
#a[a>0]
150 160 170 180 190
因此,您可以使用 sort(a[a>0])
对值进行排序,并使用与布尔掩码相同的方法设置回原始向量。
a[a>0] = sort(a[a>0])