问题描述
|
我有一个整数值列表,该值可以介于1到4之间。
因此,例如,假设“ 0”。
我现在想通过以下方式反转值:
所有带...的条目
1应转换为4
2应转换为3,
3应转换为2,
4应该转换为1。
有很多方法可以做到这一点,但是我想采用最有效的方法。
有什么想法吗?
)保存转换。然后您可以像这样通过数组运行:
解决方法
for(int i = 0; i < array.Length; i++)
{
array[i] = 5 - array[i];
}
, 实现此功能:
f(x)= 5-x
, 最有效的将是带有case语句的for循环,但它看起来不是最灵活或最漂亮。您可以提出的任何仅循环迭代一次的解决方案都可以被视为体面的解决方案,因为它们都是O(N)执行的。
, 请尝试以下操作:
var result = list.Select(item => 5 - item);
, 我不知道效率,但是我想首先过滤掉所有重复项(认为有一个LINQ扩展方法),然后从最小到最大排序,最后创建一个哈希图(Dictionary for(int i = 0,l = sortedUniqueArray.Count; i < l; i++) {
dict[sortedUniqueArray[i]] = sortedUniqueArray[l - i];
}
或类似的东西。然后,您可以像这样进行最终替换:
orgArray.Select(itm => dict[itm]);
, 我认为编写转换规则并使用此规则执行转换的好方法。