1.C++在类的成员函数面前加static标识符
成员函数属于类而非对象,该类的对象共同拥有这一个成员函数,而不是每个对象各自拥有一个成员函数。
2.自定义sort排序函数
返回类型必须为static bool,如果想升序,return a<b,降序则return a>b。
3.long long int 64位
4.计算逆序数对,归并排序,先分解,再合并,再归并排序的过程中计算逆序数对
class Solution {
public:
int InversePairs(vector<int> data) {
int length = data.size();
if(length<0) return 0;
vector<int> copy;
for(int i = 0; i <length; i++)
copy.push_back(data[i]);
long long count = InversePairsCore(data, copy, 0, length-1);
return count%1000000007;
}
long long InversePairsCore(vector<int> &data, vector<int> ©, int start, int end)
{
if(start == end)
{
copy[start] = data[start];
return 0;
}
int length = (end-start)/2;
long long left = InversePairsCore(data, copy, start, start+length);
long long right = InversePairsCore(data, copy, start+length+1, end);
int i = start+length;
int j = end;
int indexcopy = end;
long long count = 0;
while(i>=start&&j>=start+length+1)
{
if(data[i]>data[j])
{
copy[indexcopy--] = data[i--];
count += j-start-length;//由于两边都为排好序的,所以
//如果左边数字比右边数字大,那么这两个之间数字都可以和左边组成逆序数对
}
else
{
copy[indexcopy--] = data[j--];
}
}
//剩余的数字肯定为小数字,直接加进copy数组
for(;i>=start;i--) copy[indexcopy--] = data[i];
for(;j>=start+length+1;j--) copy[indexcopy--] = data[j];
for(int k = start; k <= end; k++)
{
data[k] = copy[k];
}
return left+right+count;
}
};
5.二分查找
{
int left=0, right=n-1;
while (left <= right)
{
int middle = (left+right)/2;
if (x==a[middle])
{
return middle;
}
if (x > a[middle])
{
left = middle+1;
}
else
{
right = middle-1;
}
}
return -1;
}
6.
二叉树高度的深度的区别。https://blog.csdn.net/qq_34579060/article/details/79295415
平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。