乙個陣列存放了2n+1個整數,其中有n個數出現了2次,1個數出現了1次,找出出現1次的數是多少?
//方法一:借助輔助陣列(長度為n+1,元素為一結構體(包含數值和
//個數兩個成員))進行計數,但是時間複雜度為o(n*n),空間複雜度為o(n+1)
//本來是想把val定義為結構體的,但由於結構體是值型別,不是引用型別,
//新增到list結合中的元素的屬性值不能被修改,把list中的乙個元素賦給另乙個val,修改val中的value和num,
//list中對應的val相關的屬性值是不會改變的,因為他們是記憶體中的兩個不同單元
//總之:誰叫我c學得不好,用的是c#呢,不然就用c實現了。
publicclass
val
public
intfinda(
int a,
intn)}if
(!i***ist) j++
;}}int
result =-
1;foreach
(val v
inlist)
}return
result;}//
方法二:借助乙個長度為n/2+1的陣列b,如果a中的元素不在b中,就存入b中,
//如果在b中,存在的那個元素後面所有的元素向前移乙個單位,相當於去掉這個在b中存在的元素,
//這一進一出的,出現偶數次的都去掉了,只剩下出現奇數次的元素。
public
intfindi(
int a,
intn)k--
;break;}
}if(!
i***ist)
}returnb[0
];}//方法三:排序。相等的數當然就在一起,單獨的那個數就是那個只出現一次的了,哈哈...
public
intfinds(
int a,
intn)}}
intresult =-
1;for(
inti =0
; i
<
n; i =i
+2)}
return
result;}//
方法四:異或運算(這位帥哥牛)
//異或運算 0與任何數異或等於任何數,相等的兩個數異或等於0,
//也就是兩個數對應的二進位制位進行異或運算;0^0=0 , 1^0=1 , 0^1=1 , 1^1=0
//出現偶數次都完蛋了,就剩下出現奇數次的了
public
intfindspecial(
int a,
intn)
return
res;
}
演算法學習 陣列
乙個陣列存放了2n 1個整數,其中有n個數出現了2次,1個數出現了1次,找出出現1次的數是多少?方法一 借助輔助陣列 長度為n 1,元素為一結構體 包含數值和 個數兩個成員 進行計數,但是時間複雜度為o n n 空間複雜度為o n 1 本來是想把val定義為結構體的,但由於結構體是值型別,不是引用型...
演算法學習 字尾陣列
乙個字串的題,有姿勢水平的oiers的腦中應該要浮現出許多演算法 但是我沒有姿勢,也沒有水平,除了kmp和trie樹,什麼也想不起來。直到我學了它 字尾陣列!多虧這玩意兒,我現在什麼都想不起來了。字尾陣列幹嘛用的?主要處理同乙個字串中的重複子串問題。如何實現?注意到每乙個子串,都是乙個字尾的某個字首...
樹狀陣列 小白演算法學習
在解題過程中,我們有時需要維護乙個陣列的字首和s i a 1 a 2 a i 但是不難發現,如果我們修改了任意乙個a i s i s i 1 s n 都會發生變化。可以說,每次修改a i 後,調整字首和s在最壞情況下會需要o n 的時間。當n非常大時,程式會執行得非常緩慢。因此,這裡我們引入 樹狀陣...