我有一個整數值列表,可以是1到4之間的任何值。 因此,比如我們說{1,2,4,1,3,2,1,4,4}
。 我現在要扭轉以下列方式中的值: 的所有條目與...顛倒整數值列表
- 1應被轉換爲4,
- 2應該被轉換到3,
- 3應轉換2,
- 4應轉換爲1
有許多方法可以做到這一點,但我要採取最有效的方法。
有什麼想法?
我有一個整數值列表,可以是1到4之間的任何值。 因此,比如我們說{1,2,4,1,3,2,1,4,4}
。 我現在要扭轉以下列方式中的值: 的所有條目與...顛倒整數值列表
有許多方法可以做到這一點,但我要採取最有效的方法。
有什麼想法?
效率最高的將是一個case語句的for循環,但它不會是最靈活或最漂亮的。你可以想出任何只能迭代一次循環的解決方案,因爲它們都是O(N)表現,所以可以被認爲是體面的解決方案。
爲什麼您認爲case語句比計算'5-x'更快? (不是它在實踐中通常很重要) – CodesInChaos 2011-05-30 13:31:36
重要的部分是迭代循環只有一次5-x是一個完全可以接受的解決方案。 – rerun 2011-05-30 13:39:03
for(int i = 0; i < array.Length; i++)
{
array[i] = 5 - array[i];
}
如果有幫助,請考慮將其標記爲答案 – Stecya 2011-05-31 05:26:34
我不知道效率,但我想,首先過濾掉所有副本(認爲有應該是一個LINQ擴展方法),然後排序從最小到最大,持續創造了散列映射(Dictionary < int,int >),用於保存轉換。然後你可以跑這樣的陣列像這樣:
for(int i = 0, l = sortedUniqueArray.Count; i < l; i++) {
dict[sortedUniqueArray[i]] = sortedUniqueArray[l - i];
}
或類似的東西。然後,你可以做最後的替換這樣的:
orgArray.Select(itm => dict[itm]);
嘗試以下操作:
var result = list.Select(item => 5 - item);
我想編寫轉換規則並使用此規則執行轉換的好方法。
作業?讓我們看看一些代碼。 – 2011-05-30 13:28:13
只需迭代數組,並在每個項目上執行'a [i] = 5-a [i]'。我假設你能夠自己編寫循環。 – CodesInChaos 2011-05-30 13:29:31