學習 演算法 個人簡單筆記

2021-10-02 04:00:37 字數 3048 閱讀 8083

這幾天的簡單記錄其實大部分還是在我**裡面,這是只是一些簡單的記錄

位運算《和》和》(補0)

對於int ,有1<<35(取模後變3)與1<<3相同,long就是按64取模

位運算可以實現沒有第三個值的情況下,交換兩個數

a00110011

b10101111

b10011100

a10101111

原理 aba = b

a^a=000…

異或還可以看錯不進製加法

那個原理的妙用 可用來處理 1001個數字中包括1-1000,還有乙個是1-1000中的乙個數字,重複 求那個重複的是數字是多少

arr[1001] 輪流異或 再 異或一次1-100 輪流異或

abb(重複的)cdef ^ abcde^f == b

a是成對存在的,bbb是三個 bbb =b

巧妙地補成一對一對

這道題的另一種解法,如果可以開闢空間的話,那就考慮數字下標的妙用,開闢乙個1000的空間,1就表示重複陣列中1出現的個數,遍歷一次,如果遇到++

遍歷第二次就在那新開的1000個空間中找乙個2(其他都是1)

講n轉為二進位制

判斷二進位制1的個數

package com.offer;

public

class

numberof1

x = x<<1;

}return count;

}//公升級版本的解法

//把乙個是數字-1都是把原來那個數字的最右邊的1變成0

//基於上面這句話再讓 原來那個數字與他減去一之後的數字做與運算,得到的結果就是

//最左邊的1變0,其他數字不變

public

static

intnumberof12

(int n)

return count;

}public

static

void

main

(string[

] args)

}

解決遞迴問題的兩個要點:

1.發現邏輯的相關性!!

2.找出遞迴的出口

3.委託機制,踢皮球,自己幹一點,下面的交給別人去搞

發現相似性

1.摸索重複的規律,如果找不到

2.可以引數去構造相關性

沒困難-》自找可能,再解決

遞迴其實計算機是不知道的,只是它呼叫的方法剛好就是本身

基於一種儲存斷點的形式執行

(也可以說是壓棧 談棧)

package com.offer;

public

class

addall

;//int sum = addall(a,0);//從頭來

//int sum = addall2(a, a.length-1);//從尾巴來

int sum =

addall3

(a,0

,a.length-1)

;//從尾巴來

system.out.

println

(sum);}

/** * @description : 實現遞迴累加

* @param: [a]:要累加的陣列 begin:

* @return: int:累加值

* @author: wyf

* @date: 2020/1/12 11:26

*/private

static

intaddall

(int

a,int begin)

return a[begin]

+addall

(a,begin+1)

;}/** * @description:

* @param: [a, end] a是要累加的陣列,end是結束位置

* @return: int

* @author: wyf

* @date: 2020/1/12 12:36

*/private

static

intaddall2

(int

a,int end)

return a[end]

+addall2

(a,end-1)

;}/** * @description: 折半式累加

* @param: [a:累加的陣列, begin:起始位置, end:結束位置]

* @return: int

* @author: wyf

* @date: 2020/1/12 13:10

*/private

static

intaddall3

(int

a,int begin,

int end)

else

if(end-begin==1)

int mid =

(begin + end)/2

;return

addall3

(a,begin,mid-1)

+ a[mid]

+addall3

(a,mid+

1,end);}

}

做遞迴問題的步驟:

我們自己做一部分,剩下的交給別人去做

記錄幾個有用的函式,寫演算法可能用到

int index = new random().nextint(n);

[0,n)

產生隨機數

string str1 = 「a,b,c,d」;

string arr1 = str1.split(",");

system.out.println(arrays.tostring(arr1));

字串分割成陣列

int n = integer.tostring(n, 2)

2換16就是16進製制

進駐轉換

int i = integer.

parseint

(s1)

;

string轉數字

深度學習簡單筆記

各方法在訓練中對應的作用簡單解釋 微積分 求導 梯度下降法 求最優解 最小二乘法 尋找資料的最佳函式匹配 樸素葉貝斯 回歸 分類 極大似然估計 將概率最大化的引數作為真實估計值使用。似然函式 對數似然 取對數可以將連乘轉為連加且不影響單調性,但其實可能更重要的一點是概率的連乘將會變成乙個很小的值,可...

vuex學習簡單筆記

vuex狀態管理 具體介紹隨時查官網簡介 state 類似於在例項data中定義乙個變數 getter 有點像計算屬性computed.接受state作為第乙個引數 const store newvuex.store getters store.getters.donetodos mutation ...

C 語言深度剖析個人簡單筆記

1 定義宣告最重要的區別是 定義建立了物件並且為其分配了記憶體。宣告沒有分配記憶體。2 reigster 最快的關鍵字 請求編譯器盡可能的將變數存放在cpu的暫存器中,以提高效率,是盡可能 不是絕對。3 static 修飾變數 靜態全域性變數作用域僅限於變數被定義的檔案中,定義的開始出到檔案的結束 ...