2011-05-30 82 views
3

我有一個整數值列表,可以是1到4之間的任何值。 因此,比如我們說{1,2,4,1,3,2,1,4,4}。 我現在要扭轉以下列方式中的值: 的所有條目與...顛倒整數值列表

  • 1應被轉換爲4,
  • 2應該被轉換到3,
  • 3應轉換2,
  • 4應轉換爲1

有許多方法可以做到這一點,但我要採取最有效的方法。

有什麼想法?

+2

作業?讓我們看看一些代碼。 – 2011-05-30 13:28:13

+2

只需迭代數組,並在每個項目上執行'a [i] = 5-a [i]'。我假設你能夠自己編寫循環。 – CodesInChaos 2011-05-30 13:29:31

回答

1

效率最高的將是一個case語句的for循環,但它不會是最靈活或最漂亮的。你可以想出任何只能迭代一次循環的解決方案,因爲它們都是O(N)表現,所以可以被認爲是體面的解決方案。

+0

爲什麼您認爲case語句比計算'5-x'更快? (不是它在實踐中通常很重要) – CodesInChaos 2011-05-30 13:31:36

+0

重要的部分是迭代循環只有一次5-x是一個完全可以接受的解決方案。 – rerun 2011-05-30 13:39:03

7
for(int i = 0; i < array.Length; i++) 
{ 
    array[i] = 5 - array[i]; 
} 
+0

如果有幫助,請考慮將其標記爲答案 – Stecya 2011-05-31 05:26:34

0

我不知道效率,但我想,首先過濾掉所有副本(認爲有應該是一個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]); 
2

實現此功能:

F(X)= 5 - X

+0

正是我在想的:) – BugFinder 2011-05-30 13:33:49

1

嘗試以下操作:

var result = list.Select(item => 5 - item); 
0

我想編寫轉換規則並使用此規則執行轉換的好方法。