partition函数
用途:快速排序、查找第k大的数、查找top k
int partition(int* a,int low,int high)
{
int l = low;
int h = high;
int temp = a[l];
while(l<h)
{
while(l<h && a[h]>=temp)
{
h--;
}
if(l<h)
{
a[l] = a[h];
l++;
}
while(l<h && a[l]<=temp)
{
l++;
}
if(l<h)
{
a[h] = a[l];
h--;
}
}
a[l] = temp;
return l;
}
二叉树中找到从根节点到某一节点的路径
bool findPath(Node* root, Node* node, list<Node*>& path)
{
path.push_back(root);
if(root == node)
return true;
if(root->left!=NULL)
{
if(findPath(root->left, node, path))
return true;
}
if(root->right!=NULL)
{
if(findPath(root->right, node, path))
return true;
}
path.pop_back();
return false;
}
最大公约数(gcd-greatest common divisor)、最小公倍数(lcm-least common mutiple)
求多个数的最大公约数:先求前两个数的最大公约数,然后求最大公约数和第三个数的最大公约数,直到最后。
最小公倍数求法:先求最大公约数,然后将每个数除以最大公约数的商相乘,最后再乘以最大公约数。
辗转相除法求最大公约数:
int gcd(int m,int n)
{
int temp;
if(m<n)
{
temp = m;
m = n;
n= temp;
}
while(m%n !=0)
{
temp = m%n;
m = n;
n = temp;
}
return n;
}