算法編程方法總結

動態規劃

1、通常用數組表示,且通常從後往前思考,編程從前往後迭代實現,如兩個字符串的匹配
2、寫出邊界函數,遞歸規律

1、回溯法 (套用backTrack)
2、前序、後續。。
3、利用遞歸左右子樹與或,如下,先判斷當前節點node(通常以葉子節點向上考慮),在與或左右子樹。

    bool hasPathSum(TreeNode *root, int sum) {
       if(root == NULL)
           return false;
        if(root->left == NULL && root->right == NULL && sum - root->val == 0)
           return true;
        return hasPathSum(root->left,sum-root->val) || hasPathSum(root->right,sum-root->val);
    }

4、建立樹結構時,每一個左右孩子,都同樣是root根節點,

TreeNode *fun(){
    root  = buildRoot();
    root->left=fun()
    root->right = fun()
    return root;
}

分治

N個亂序中尋找第k大的值: 利用快速排序

注意點

1、一個數是2的指數次(1,2,4,8…),它的二進制只有1個1,利用n&(n-1) ==0 判斷是否該數是否符合條件。
2、判斷兩個字符串是否有相同字符時,可以利用二進制方法: ’

string s="abcd";
string s2="efdg";
int vs =0;
for(int j=0;j<s.size();j++){
	vs |=1<<s[j];
}
int vs2=...;
vs&vs2==0  ? 沒有一個字符相同

3、桶原理
4、判斷一個整數是否是迴文,樸素方法是:化成字符串檢測。
5、m[x][y] 爲一個set時,可以設置unordered_map<int x,unordered_map<int y,set< int >> m;

部分要點

bool operator<(int a,int b){  //認爲參數中默認a的值小於b,大於小於號只是表明哪個的優先級更高。
	return a>b;    //從小到大  
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章