数据结构初阶---复杂度的OJ例题
复杂度的OJ例题
- 一、消失的数字
- 1.思路一
- 2.思路二
- 3.思路三
- 二、旋转数组
- 1.思路一
- 2.思路二
- 3.思路三
一、消失的数字
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗?
链接:力扣:消失的数字
1.思路一
排序+遍历:如果下一个数据不等于上一个数据加1,那么下一个数据就是那个消失的数字。
时间复杂度:O(N*LogN)由于这个时间复杂度时间复杂度过高,本思路不再冗余,赘述。
2.思路二
利用等差数列公式:从0加到n,然后再减去这个数组中的所有数字,那么最终所得的差就是缺失的数字。
时间复杂度:O(N)
代码如下:
#include <stdio.h>
int missingNumber(int* nums, int numsSize)
{int N = numsSize;int ret = N * (N + 1) / 2;for (int i = 0; i < N; i++){ret -= nums[i];}return ret;
}int main()
{int nums[] = { 0,1,2,3,4,5,7,8,9,10 };int sz = sizeof(nums) / sizeof(nums[0]);int ret=missingNumber(nums,sz);printf("%d", ret);return 0;
}
3.思路三
单身狗思路:利用:按位异或运算符:^(相同为0,相异为1)任何数字和0 ^ 还等于它本身。首先我们要把一个完整的数组按位异或起来,然后再与题目中缺失一个数字的数组再进行按位异或,最终得到的结果就是消失的数字。
代码如下:
#include <stdio.h>
int missingNumber(int* nums, int numsSize)
{int N = numsSize;int x = 0;//第1个循环的目的:先把一个完整的数组:从0~n的所有数字全部按位异或起来存放在一个数字x中//注意:这里循环的终止条件是:<=N,(因为我们连N也要算上)for (int i = 0; i <= N; i++){x ^= i;}//第2个循环的目的:就是让一个完整的数组与缺失一个数字的数组进行按位异或,最终得到的结果就是那个消失的数字!//注意:这里循环的终止条件是:<N,(因为nums数组中确失一个数字)for (int i = 0; i < N; i++){x ^= nums[i];}return x;
}int main()
{int nums[] = { 0,1,2,3,4,5,7,8,9,10 };int sz = sizeof(nums) / sizeof(nums[0]);int ret=missingNumber(nums,sz);printf("%d", ret);return 0;
}
二、旋转数组
链接力扣:旋转数组
1.思路一
中规中矩:依次向左旋转K个数据
合计旋转:K%N次
时间复杂度:O(N^2)
空间复杂度:O(1)
因为时间复杂度超过限制,所以说不予实现。
2.思路二
核心思想:以空间换时间:我额外开辟一个数组,直接复制从k开始后面所有数据到前面,然后把复制n-k的数字放后面。
时间复杂度:O(N)
空间复杂度:O(N)

代码如下:
void rotate(int* nums, int numsSize, int k)
{int n = numsSize;int* tmp = (int*)malloc(sizeof(int) * n);k %= n;//一定别忘了k%n!memcpy(tmp, &nums[n - k], sizeof(int) * k);memcpy(&tmp[k], nums, sizeof(int) * (n - k));memcpy(nums, tmp, sizeof(int) * n);free(tmp);//一定别忘了Free!!!因为是动态开辟的空间
}int main()
{int nums[] = { 1,2,3,4,5,6,7 };int k = 0;printf("请输入你想要旋转的次数:");scanf("%d", &k);int sz = sizeof(nums) / sizeof(nums[0]);rotate(nums, sz, k);for (int i = 0; i < sz; i++){printf("%d ", nums[i]);}return 0;
}
3.思路三
数学思想:以k为划分界线,左边逆置,右边逆置,整体逆置。

代码如下:
//逆置函数
void Inversion(int* nums, int left, int right)
{while (left < right){int tmp = nums[left];nums[left] = nums[right];nums[right] = tmp;left++;right--;}
}
//旋转函数
void rotate(int* nums, int numsSize, int k)
{int n = numsSize;k %= n;Inversion(nums, 0, n - k - 1);//左边逆置Inversion(nums, n - k, n - 1);//右边逆置Inversion(nums, 0, n - 1);//整体逆置}int main()
{int nums[] = { 1,2,3,4,5,6,7 };int k = 0;printf("请输入你想要旋转的次数:");scanf("%d", &k);int sz = sizeof(nums) / sizeof(nums[0]);rotate(nums, sz, k);for (int i = 0; i < sz; i++){printf("%d ", nums[i]);}return 0;
}
好了,今天的分享就到这里了
如果对你有帮助,记得点赞👍+关注哦!
我的主页还有其他文章,欢迎学习指点。关注我,让我们一起学习,一起成长吧!

相关文章:
数据结构初阶---复杂度的OJ例题
复杂度的OJ例题 一、消失的数字1.思路一2.思路二3.思路三 二、旋转数组1.思路一2.思路二3.思路三 一、消失的数字 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(N)时间内完成吗? 链接:力扣&…...
Prometheus|云原生|grafana的admin用户密码重置备忘记录
很久很久以前部署的一个Prometheus套装里的grafana密码给忘记了,回忆总是很痛苦,因此还是在这里简单的记录一下,下次就不需要满世界反翻找了。 一, 改库重置密码为admin grafana密码存放在哪里的? 必须说明一下&am…...
[hive]中的字段的数据类型有哪些
Hive中提供了多种数据类型用于定义表的字段。以下是Hive中常见的数据类型: 布尔类型(Boolean):用于表示true或false。 字符串类型(String):用于表示文本字符串。 整数类型(Intege…...
第六章 树【数据结构和算法】【精致版】
第六章 树【数据结构和算法】【精致版】 前言版权第六章 树6.1 应用实例6.2 树的概念6.2.1树的定义与表示6.2.2 树的基本术语6.2.3树的抽象数据类型定义 6.3 二叉树6.3.1二叉树的定义6.3.2 二叉树的性质6.3.3 二叉树的存储 6.4 二叉树的遍历6.4.1 二叉树的遍历及递归实现**1-二…...
第九章:Dynamic Symbolic Execution
文章目录 Dynamic Symbolic Executionoverviewmotivationdynamic symbolic execution常用的其他技术对比Random Testingsymbolic executionCombined static and symbolic - Dynamic Execution (DSE)step1: 初始化两个具体的值 x,ystep2: 根据定义得出 z 的 concrete value 和 s…...
在搜索引擎中屏蔽csdn
csdn是一个很好的技术博客,里面信息很丰富,我也喜欢在csdn上做技术笔记。 但是CSDN体量太大,文章质量良莠不齐。当在搜索引擎搜索技术问题时,搜索结果中CSDN的内容占比太多,导致难以从其他优秀的博客平台中获取信息。因…...
Linux开发工具的使用(vim、gcc/g++ 、make/makefile)
文章目录 一 :vim1:vim基本概念2:vim的常用三种模式3:vim三种模式的相互转换4:vim命令模式下的命令集- 移动光标-删除文字-剪切/删除-复制-替换-撤销和恢复-跳转至指定行 5:vim底行模式下的命令集 二:gcc/g1:gcc/g的作用2:gcc/g的语法3:预处理4:编译5:汇编6:链接7:函…...
MySQL(10):创建和管理表
基础知识 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是:创建数据库、确认字段、创建数据表、插入数据。 要先创建一个数据库,而不是直接创建数据表:从系统架构的层次上看,MySQL 数据库系统从大到…...
Python赋值给另一个变量且不改变原变量
Python赋值给另一个变量且不改变原变量 在Python中,如果你想将一个变量的值赋给另一个变量,同时保持原变量不变,你可以使用复制(copy)而不是引用(reference)。Python中的变量通常是通过引用&…...
PHP进销存ERP系统源码
PHP进销存ERP系统源码 系统介绍: 扫描入库库存预警仓库管理商品管理供应商管理。 1、电脑端手机端,手机实时共享,手机端一目了然。 2、多商户Saas营销版 无限开商户,用户前端自行注册,后台管理员审核开通 3、管理…...
npm i 报错:Cannot read properties of null (reading ‘refs‘)
问题: 旧项目要更改东西,重新部署上线的时候,发现页面显示有异常。当时在开发环境是没有问题的。后经排查是一个引入swiper的页面报错了,只要注释掉swiper插件,就没问题了,但这肯定是不行的。 原因: npm和…...
C#学习中关于Visual Studio中ctrl+D快捷键(快速复制当前行)失效的解决办法
1、进入VisualStudio主界面点击工具——>再点击选项 2、进入选项界面后点击环境——>再点击键盘,我们可用看到右边的界面的映射方案是VisualC#2005 3、 最后点击下拉框,选择默认值,点击之后确定即可恢复ctrlD的快捷键功能 4、此时可以正…...
银河E8,吉利版Model 3:5米大车身、45寸大屏、首批8295座舱芯
作者 | Amy 编辑 | 德新 吉利银河E8在曝光后多次引爆热搜,李书福更是赞誉有加,称其为「买了就直接享受」。这款备受瞩目的车型于 10月30日晚首次亮相。 虽然新车外观在今年上海车展上早已曝光,但这次的发布会却带来了不少惊喜。新车架构以及…...
技术分享 | 被测项目需求你理解到位了么?
需求分析是开始测试工作的第一步,产品会先产出一个需求文档,然后会组织需求宣讲,在需求宣讲中分析需求中是否存在问题,然后宣讲结束后,通过需求文档分析测试点并且预估排期。所以对于需求的理解非常重要。 需求文档 …...
[MRCTF2020]你传你呢1
提示 只对php以及phtml文件之类的做了防护content-type.htaccess文件 这里就不整那么麻烦直接抓包测试 首先对后缀测试看过滤了哪些 (php php3 pht php5 phtml phps) 全部被ban了 到这里的后续思路通过上传一些配置文件把上传的图片都以php文件执行 尝试上传图片码, 直接上传成…...
一些对程序员有用的网站
当你遇到问题时 Stack Overflow:订阅他们的每周新闻和任何你感兴趣的主题Google:全球最大搜索引擎必应:在你无法使用Google的时候CSDN:聊胜于无AI导航一号AI导航二号 新闻篇 OSCHINA:中文开源技术交流社区 针对初学…...
小程序使用echarts(超详细教程)
小程序使用echarts第一步就是先引用到小程序里面,可以直接从这里下载 文件很多,我们值下载 ec-canvas 就好,下载完成后,直接放在pages同级目录下 index.js 在我们需要的页面的 js 文件顶部引入 // pages/index/index.js impor…...
js控制输入框中的光标位置
主要逻辑 主要应用selectionStart、selectionEnd来实现 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…...
Openssl生成证书-nginx使用ssl
Openssl生成证书并用nginx使用 安装openssl yum install openssl -y创库目录存放证书 mkdir /etc/nginx/cert cd /etc/nginx/cert配置本地解析 cat >>/etc/hosts << EOF 10.10.10.21 kubernetes-master.com EOF10.10.10.21 主机ip、 kubernetes-master.com 本…...
Go语言实现数据结构栈和队列
Go语言实现数据结构栈和队列 1、栈 package mainimport "fmt"func main(){// 创建栈stack : make([]int, 0)// push压入栈stack append(stack, 10)// pop弹出v : stack[len(stack)-1]// 10fmt.Println(v)stack stack[:len(stack)-1]// 检查栈空// truefmt.Printl…...
tao-8k Embedding模型部署教程:支持中文长文本的高兼容性向量服务
tao-8k Embedding模型部署教程:支持中文长文本的高兼容性向量服务 你是不是遇到过这样的问题?想把一段很长的中文文档,比如一篇技术报告、一份产品说明书,甚至是一本小说的章节,转换成计算机能理解的向量,…...
新手友好:借助快马AI零基础实现openclaw101官网登录功能入门教程
今天想和大家分享一个特别适合编程新手的实践项目——如何用最简单的方式实现一个网站登录功能。作为一个刚入门的前端学习者,我发现登录功能看似简单,其实包含了很多核心知识点。通过InsCode(快马)平台,我们可以轻松获得一个完整可运行的登录…...
OpenClaw飞书机器人实战:Qwen3-32B-Chat私有镜像接入
OpenClaw飞书机器人实战:Qwen3-32B-Chat私有镜像接入 1. 为什么选择OpenClaw飞书本地大模型? 去年我接手了一个小团队的效率工具改造项目,核心需求是"在不泄露内部数据的前提下,实现自动化日报生成和文件归档"。尝试过…...
【JupyterLab实战】构建跨平台AI算力监控仪表盘
1. 为什么需要跨平台AI算力监控? 在AI开发过程中,我们经常遇到这样的场景:模型训练到一半突然卡死,却不知道是GPU内存爆了还是CPU瓶颈;多卡并行时某张卡莫名其妙跑不满;昇腾芯片的温度报警频繁触发却找不到…...
嵌入式开发中数据结构的优化与应用实践
1. 数据结构在嵌入式开发中的核心价值作为一名在嵌入式领域摸爬滚打十年的老兵,我深刻体会到数据结构就像瑞士军刀里的各种工具——选对工具能让工作事半功倍。在资源受限的MCU环境中,一个精心选择的数据结构可能意味着程序能否流畅运行和内存是否会爆掉…...
给嵌入式开发者的英飞凌HSM实战指南:从AUTOSAR集成到密钥安全存储
英飞凌HSM深度实战:AUTOSAR集成与密钥管理全解析 在汽车电子领域,安全性能已经从"加分项"变成了"必选项"。想象一下,当一辆智能汽车以120公里时速行驶时,任何微小的安全漏洞都可能导致灾难性后果。这正是英飞…...
抑制素A抗体如何提升妊娠中期唐氏综合征筛查的效能?
一、为何抑制素A成为妊娠期的重要生物标志物?抑制素A是一种由α和βA亚基通过二硫键连接形成的异源二聚体糖蛋白。在非妊娠期,它主要由卵巢颗粒细胞分泌,作为反馈调节因子,选择性地抑制垂体前叶分泌卵泡刺激素。进入妊娠状态后&am…...
STM32F407ZGT6最小系统:从原理图到PCB的实战设计解析
1. STM32F407ZGT6最小系统设计入门 第一次接触STM32F407ZGT6最小系统设计时,我也被各种专业术语和复杂的电路图搞得晕头转向。但经过几个项目的实战后,我发现只要掌握几个关键模块,设计一个稳定可靠的最小系统其实并不难。STM32F407ZGT6是STM…...
Cursor Pro完整解锁方案:一站式解决AI编程助手使用限制的终极指南
Cursor Pro完整解锁方案:一站式解决AI编程助手使用限制的终极指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reach…...
在线PPT工具哪个最方便快捷?6款主流工具实测,新手也能快速出片
作为AI博主,日常要产出AI工具实测、智能创作干货、高效办公教程,对在线PPT工具的核心需求远超基础编辑——全端适配、AI生成专业、安全合规、资源充足,无需复杂操作,既能依托AI快速生成高质量内容,又能兼顾多场景使用与…...
