1.复杂度讲解

目录

1.数据结构简介

2.算法简介

3.如何学好数据结构和算法

4.时间复杂度

1.推导大O阶方法:

2.注意事项:

5.大小比较

6.两个典型例题

1.消失的数字

2.轮转数组

7.结尾


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.结尾

        本章内容到此结束,以后我都会以记笔记的方法写博客。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值