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

相关推荐
rit84324998 分钟前
人工鱼群算法AFSA优化支持向量机SVM,提高故障分类精度
算法·支持向量机·分类
爱喝水的鱼丶26 分钟前
SAP-MM:SAP采购组织全面学习指南:从概念到实战配置图解
运维·开发语言·数据库·学习·sap·mm模块·采购组织
楼田莉子30 分钟前
Python学习——字典和文件
开发语言·python·学习·pycharm
佩佩(@ 。 @)32 分钟前
嵌入式:走馬燈-stm32GPIOF_LED9、10; GPIOE_D10、D12 流水綫蜂鸣器
stm32·嵌入式硬件·算法
知彼解己38 分钟前
字符串大数相加:从初稿到优化的思路演进
java·开发语言·算法
小龙1 小时前
图卷积神经网络(GCN)学习笔记
笔记·学习·cnn·gcn·图卷积神经网络·理论知识
永日456701 小时前
学习日记-CSS-day53-9.11
前端·css·学习
haing20191 小时前
使用deboor法计算三次B样条曲线在参数为u处的位置的方法介绍
算法·b样条曲线·deboor
qq_352109521 小时前
旋转数字矩阵 od
算法
咚咚锵咚咚锵1 小时前
DrissionPage的学习
前端·python·学习