学习数据结构和算法的第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)

相关推荐
小白菜又菜4 小时前
Leetcode 3432. Count Partitions with Even Sum Difference
算法·leetcode
wuhen_n5 小时前
LeetCode -- 15. 三数之和(中等)
前端·javascript·算法·leetcode
sin_hielo5 小时前
leetcode 2483
数据结构·算法·leetcode
石像鬼₧魂石5 小时前
HexStrike-AI人工智能 渗透测试学习(Metasploitable2 192.168.1.4)完整流程总结
学习·ubuntu
非凡ghost5 小时前
MusicPlayer2(本地音乐播放器)
前端·windows·学习·软件需求
Xの哲學6 小时前
Linux多级时间轮:高精度定时器的艺术与科学
linux·服务器·网络·算法·边缘计算
蓝桉~MLGT6 小时前
Ai-Agent学习历程—— 阶段1——环境的选择、Pydantic基座、Jupyter Notebook的使用
人工智能·学习·jupyter
大头流矢6 小时前
归并排序与计数排序详解
数据结构·算法·排序算法
油泼辣子多加6 小时前
【信创】算法开发适配
人工智能·深度学习·算法·机器学习
一路往蓝-Anbo6 小时前
【第20期】延时的艺术:HAL_Delay vs vTaskDelay
c语言·数据结构·stm32·单片机·嵌入式硬件