演算法學習 陣列

2021-09-08 07:30:03 字數 1375 閱讀 5170

乙個陣列存放了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實現了。

public

class

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非常大時,程式會執行得非常緩慢。因此,這裡我們引入 樹狀陣...