目录
1.数据结构简介
通俗的理解,在内存中管理数据。
2.算法简介
一系列的计算步骤,用来将输入数据转化成输出结果。
3.如何学好数据结构和算法
①.死磕代码;
②.注意画图和思考。
4.时间复杂度
算法的时间复杂度是一个函数。算法中的基本操作的执行次数,为算法的时间复杂度。一般用大O表示法表示。
1.推导大O阶方法:
1.用常数1取代运行时间中的所有加法常数;
2.在修改后的运行次数函数中,只保留最高阶项;
3.如果最高阶项存在且不是1,则去除与这个项目相除的常数,得到的结果就是大O阶。
2.注意事项:
1.O(1)不是代表一次,而是常数次;
2.在实际中一般情况关注的是算法的最坏运行情况,所以数组中搜索数据时间复杂度为O(N);
3.数循环容易被坑;
4.数据结构与算法中2为底的对数一般简写为logN。
5.大小比较
下图直观表示出其大小关系。
大小关系也可以简记为:常对幂指阶。
6.两个典型例题
1.消失的数字
代码如下:
有两种方法,异或的方法和加减的方法。
//int missingNumber(int* nums, int numsSize) {//找连续数组中缺少的一个数
// int sum = 0;
// sum = (0 + numsSize) * (numsSize + 1) / 2;
// int i = 0;
// for (i = 0;i < numsSize;i++) {
// sum -= nums[i];
// }
// return sum;
//}
int missingNumber(int* nums, int numsSize) {//异或的方法也行
int i = 0;
int val = 0;
for (i = 0;i < numsSize;i++) {
val ^= nums[i];
}
for (i = 0;i <= numsSize;i++) {
val ^= i;
}
return i;
}
2.轮转数组
代码如下:
void rotate(int* nums, int numsSize, int k) {
k = k % numsSize;
int nums2[100000] = {0};
int i = 0;
int j = 0;
for(i = numsSize - k,j = 0;i < numsSize && j < k;i++,j++){
nums2[j] = nums[i];
}
for(i = numsSize - 1 - k;i >= 0;i--){
nums[i + k] = nums[i];
}
for(i = 0;i < k;i++){
nums[i] = nums2[i];
}
return;
}
7.结尾
本章内容到此结束,以后我都会以记笔记的方法写博客。