void matrix(vector
>& num, int x1, int y1, int x2, int y2)
if (x1 < x2)
}if (x1 < x2 && y1 < y2)
}if (x2 - x1 > 1 && y1 < y2)
}x1++, y1++, x2--, y2--;
}}
template
class stackwithmin
else
}void pop()
t top()
t min()
bool empty()
private:
stack
m_data;
stack
m_min;
};
bool ispoporder(int num1, int num2, int len)
s.push(*p++);
}if (s.top() != *q)
s.pop();
q++;
}if (s.empty() && q - num2 == len)
}return
false;
}
bool verifybst(int num, int
len)
int i = 0;
while (i < len - 1)
else
}int j = i;
while (j < len - 1)
else
}bool left = true;
if (i > 0)
bool right = true;
if (i < len - 1)
return left && right;
}
void findpath(treenode *root, int expectedsum, vector
& path, int currentsum)
path.push_back(root->val);
currentsum += root->val;
bool isleaf = root->left == null && root->right == null;
if (expectedsum = currentsum && isleaf)
cout
findpath(root->right, expectedsum, path, currentsum);
currentsum -= root->val;
path.pop_back();
}void findpath(treenode *root, int expectedsum)
vector
path;
int currentsum = 0;
findpath(root, expectedsum, path, currentsum);
}
complexlistnode* copylist(complexlistnode *head)
//copy list
complexlistnode *p = head;
while (p !=
null)
//deal with the sibling
p = head;
while (p !=
null)
p = p2->next;
}//separate the list
complexlistnode *newhead = head->next;
complexlistnode *pre1 = head;
complexlistnode *pre2 = newhead;
p = newhead->next;
while (p !=
null)
pre1->next =
null;
return newhead;
}
void converthelp(treenode *root, treenode *&last)
treenode *cur = root;
if (cur->left !=
null)
cur->left = last;
if (last !=
null)
last = cur;
if (cur->right !=
null)
}treenode* convert(treenode *root)
return p;
}
void perhelp(char *str1, char *str2)
}
int n[10] = ;
void permutation(int num, bool flag, int
len, int pos)
else
flag[i] = false;}}
}
/* 演算法說明:從n個數中選m個數,可以分解為以下兩步:
* (1)首先從n個數中選取編號最大的數,然後在剩下的n-1個數中選取m-1個數,直到從n-(m-1)個數中選取1個數為止。
* (2)從n個數中選取編號次小的乙個數,繼續執行第(1)步,直到當前可選編號最大的數為m。
*//* 求從a[n]中選取m個數的可能組合。陣列a[n]表示候選集;b[m]用來儲存當前組合中的某個元素,
* 這裡儲存的是這個元素在a中的下標;常量m表示滿足條件的乙個組合中元素的個數,m=m,m只用來輸出結果
*/void combine(int a, int b, int n, int m, int m)
else
cout
<}
}}
劍指offer學習筆記
筆記主要記錄方法和知識點 知識點1 負數與補碼 乙個參考 知識點2 移位操作 右移 變小 按位 操作 知識點3 0xffffffff表示32位 1 o logn 的方法 非遞迴的快速冪,用到二進位制表示。在迴圈內注意base base。兩個指標等間距一起走。想明白斷開鍊錶這個事情,相當於操作是在原有...
劍指offer 學習筆記 樹
樹的寬度 廣度 優先遍歷 先訪問樹的第一層節點,再訪問第二層節點,直到最後一層。同一層節點中,從左到右依次訪問。二叉搜尋樹中,左子節點總是小於等於根節點,右子節點總是大於等於根節點。我們可以平均在o logn 的時間內根據節點值在二叉搜尋樹中找到乙個節點。二叉樹的特例有堆和紅黑樹。堆分最大堆和最小堆...
劍指offer筆記
對於這道題來說,書上的和leetcode上的是不一樣的。在leetcode上,是一位陣列中判斷是否有重複數字,有的話任意返回乙個就行。這個思路也有兩個 1.先用乙個排序如快排o nlogn 然後就判斷相鄰元素是否相等,若相等直接返回即可。2.用乙個集合set,遍歷陣列放進去,因為集合有唯一性,若哪個...