【刷题总结】一些记录

二分法查找代码

int twodivide(int a[], int n,int target)
{
	int begin = 0;
	int end = n - 1;
	int midle;
	while (begin <= end)//是小于等于不是小于
	{
		midle = begin + (end - begin) / 2;//这里用头+(尾-头)/2
		if (begin == end)
		{
			if (a[begin] == target) { return begin; }
			else {return -1;}
		}
		if (a[midle] >= target)//这里是大于等于
		{
			end = midle;
		}
		else
		{
			begin = midle + 1;//这里是midle+1
		}
	}
	return -1;
}

容器size的返回类型

vector.size()返回的类型是 unsigned int类型,不是int类型。

关于一些矩阵/字符串合并

合并两个字符串时,如果从前往后复制需要重复移动很多次字符,可以考虑从后往前复制比较快。

关于递归

递归的计算复杂度很高,并且可能包含大量的重复计算,能用迭代就不要用递归。

链表逆序

在这里插入图片描述
具体实现可以看LeetCode中的06从尾到头打印字符串

生成随机数[left,right]闭区间

#include<ctime>
srand(time(NULL));//生成随机种子
rand() % (rangeR - rangeL + 1) + rangeL;//生成随机数[l,r]闭区间

计算程序运行时间

clock_t startTime = clock();
int ret=testFunciton();
clock_t endTime = clock();
cout << double(endTime - startTime)/CLOCKS_PER_SEC<<"S" << endl;

判断报错

#include<cassert>
assert(isSorted<T>(array, n));

函数指针的使用

//函数调用函数指针
testSortTime("selectionSort", selectionSort<int>, array1, n);

//函数定义
template <typename T>
void selectionSort(T array[], int n)
{
	for (int i = 0;i < n;i++)
	{
		int minIndex = i;
		for (int j = i+1;j < n;j++)
		{
			if (array[j] < array[minIndex])
			{
				minIndex = j;
			}
		}
		swap<T>(array[i], array[minIndex]);
	}
}

//函数指针 void(*sort)
	template<typename T>
	void testSortTime(string Sortname, void(*sort)(T array[], int n), T array[], int n)//函数指针
	{
		clock_t startTime = clock();
		sort(array, n);
		clock_t endTime = clock();
		assert(isSorted<T>(array, n));
		cout << Sortname << " " << double(endTime - startTime)/CLOCKS_PER_SEC<<"S" << endl;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值