学习数据结构和算法的第6天

时间复杂度和空间复杂度相关练习题

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在**O(n)**时间内完成吗?
示例1:

c 复制代码
输入:[3,0,1]
输出:2

示例2:

c 复制代码
输入:[9,6,4,2,3,5,7,0,1]
输出:8

一道题有多种方法,那么我们不用实现,只需要分析出每种方法的时间复杂度,选择复杂度为优的方法即可,这就是复杂度实际中的意义

思路一:

​ 排序-》qsort快排->时间复杂度O(n*log2(N))

思路二:

​ (0+1+2+3+4+5+····+n)-(a[0]+a[1]+a[2]+a[3]+···+a[n-1])

​ 时间复杂度O(N) 空间复杂度O(1)

1、等差数列前你项和公式

2、循环加没个值

思路三:

​ 数组中值是几就在第几个位置写下这个值

0 1 2 n

时间复杂度O(N) 空间复杂度O(N)

思路四:

​ 给一个值x=0

​ x先跟[0,n]的所有值异或

​ x在跟数组中每个值异或 最后x就是缺的那个数字

eg:x先与[0,9]进行异或,在与数组内的[9,4,5,7,6,1,2,3,0]进行异或,1进行异或时8只出现了一次,而其他数出现了两次。

时间复杂度O(N)

**异或:**相同为0,相异为1

c 复制代码
#include <stdio.h>
    int missingNumber(int*nums,int numsSize)
{
    int x=0;//跟[0,n]进行异或
    for(int i=0;i<=numsSize;++i)
    {
        x ^=i;
    }
    //在跟数组中值进行异或
    for(int i=0;i<numsSize;++i)
    {
        x ^=nums[i];
    }
    return x;
}

给定一个数组,将数组中的元素向右移动k个位置,其中 k 是非负数。

进阶:

•尽可能想出更多的解决方案,至少有三种不同的方法可以解决这个问题。

·你可以使用空间复杂度为(1)的原地算法解决这个问题吗?
示例1:

c 复制代码
输入: nums =[1,2,3,4,5,6,7],k=3
输出:[5,6,7,1,2,3,4]
解释:
向右旋转1步:[7,1,2,3,4,5,6]

思路一:

​ 暴力求解 旋转k次

​ 时间复杂度:O(N*K) 空间复杂度:O(1)

思路二:

​ 开辟额外空间,以空间换时间

c 复制代码
输入:nums=[1,2,3,4,5,6,7],k=3

tmp 5,6,7 1,2,3,4

c 复制代码
输出:5,6,71,2,3,4

时间复杂度:O(N) 空间复杂度:O(N)

思路三:

c 复制代码
输入: nums =[1,2,3,4,5,6,7],k=3
输出:[5,6,7,1,2,3,4]

4 3 2 1 5 6 7 前n-k个逆置

4 3 2 1 7 6 5后k个逆置

5 6 7 1 2 3 4整体逆置

时间复杂度:O(N) 空间复杂度:O(1)

相关推荐
学编程的闹钟1 小时前
107【php手册】
学习
郝学胜-神的一滴8 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
盐焗西兰花10 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
颜酱10 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
QiZhang | UESTC10 小时前
学习日记day76
学习
久邦科技10 小时前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
m0_7369191010 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi98783810 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
Gain_chance10 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
DuHz10 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理