学习数据结构和算法的第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)-(a0+a1+a2+a3+···+an-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)

相关推荐
兴通物联科技36 分钟前
SMT PCB 微小 DataMatrix 码扫不动问题分析 兴通 XT8601B 600 万像素工业读码器落地实践
大数据·人工智能·单片机·嵌入式硬件·算法·计算机视觉
lzhdim1 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
那年窗外下的雪.3 小时前
AIDC 学习日志|第 15 天|EVPN 多归属故障收敛与撤销机制
网络·学习·php
月华路3 小时前
G1 GC 对数组与大对象(Humongous)的处理
java·jvm·算法
我想走路带风3 小时前
LRU和最长前缀和(计算机网络算法)
计算机网络·算法
M78佐菲4 小时前
Linux学习笔记:进程
linux·笔记·学习·算法
徐小夕5 小时前
表格、文档、甘特、大屏、表单一站打通:pxcharts超级表格4.0正式上线!
前端·算法·github
我命由我123455 小时前
人脸识别 - 勒克斯(光线照射到物体表面上的明亮程度)
android·java·学习·java-ee·人脸识别·学习方法·android runtime
TechLee6 小时前
跨语言加解密总对不上?这个纯 Go 神库让 AES/RSA 与 PHP、Java 100% 互通
java·后端·算法