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

相关推荐
CoovallyAIHub10 分钟前
YOLOv8-SMOT:基于切片辅助训练与自适应运动关联的无人机视角小目标实时追踪框架
深度学习·算法·计算机视觉
CoovallyAIHub21 分钟前
全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
深度学习·算法·计算机视觉
像风一样自由202026 分钟前
五种算法详解(SVM / Logistic Regression / kNN / Random Forest / HistGradientBoosting)
算法·随机森林·支持向量机
7hhhhhhh35 分钟前
自学嵌入式第二十四天:数据结构(4)-栈
数据结构
一起努力啊~42 分钟前
算法题打卡力扣第34题:在排序数组中查找元素的第一个和最后一个位置(mid)
数据结构·算法·leetcode
晨曦5432101 小时前
图(Graph):关系网络的数学抽象
开发语言·算法·php
helloyaren1 小时前
Docker Desktop里搭建Redis 8.2.1集群的保姆级教程
redis·学习·集群·cluster
1白天的黑夜12 小时前
链表-143.重排链表-力扣(LeetCode)
数据结构·leetcode·链表
风和日丽 随波逐流2 小时前
java17学习笔记
笔记·学习
cwplh3 小时前
Manacher(马拉车算法)详解
算法