LeetCode/NowCoder-复杂度OJ练习

无论你觉得自己多么的不幸,永远有人比你更加不幸。💓💓💓

目录

 说在前面

题目一:消失的数字

题目二:轮转数组

SUMUP结尾


 说在前面

 dear朋友们大家好!💖💖💖数据结构的学习离不开刷题,我们之前介绍了简单的复杂度相关的分析,那今天我们就紧随其后刷上几道题,对其进行巩固和联系吧当今天我们的题目主要来自LeetCode。

 👇👇👇

友友们!🎉🎉🎉点击这里进入力扣leetcode学习🎉🎉🎉
​以下是leetcode题库界面:

 

题目一:消失的数字

题目链接:面试题 17.04. 消失的数字 - 力扣(LeetCode)

题目描述:

题目分析:

 思路1:将1到n的数进行求和,再减去数组中的每个元素,剩下的数就是消失的数字。

求和序列:S= 1 + 2 + 3 + ... (i-1) + i + (i+1) + ... + (n-1) + n

数组元素:{1,2,3,...i-1,i+1,...,n - 1,n + 1}

可以发现,如果将数组元素和求和序列的各项进行对比,发现求和序列的和S比数组元素的和多i,而这个i就是我们需要求的消失的数字。

代码如下:

int missingNumber(int* nums, int numsSize) {int sum = 0;for (int i = 0; i <= numsSize; i++){sum += i;//1到n求和}for (int i = 0; i < numsSize; i++){sum -= nums[i];//减去数组中的每个元素}return sum;
}

思路2:用0异或从1到n的所有数字,再异或数组nums中的所有元素。

根据0异或任意数 x 都得 x ,且 x ^ x = 0,所以这样做只有数组nums中所缺少的那个数被异或了一次,结果显然就是它。

代码如下:

int missingNumber(int* nums, int numsSize) {int ret = 0;for (int i = 0; i <= numsSize; i++){ret ^= i;//用0从1到n异或}for (int i = 0; i < numsSize; i++){ret ^= nums[i];//再异或数组中的每个元素}return ret;
}

 上面两种算法的复杂度都是O(N),是可行的,但是思路1在N非常大的时候可能存在溢出风险。

 

题目二:轮转数组

题目链接:189. 轮转数组 - 力扣(LeetCode)

题目描述:

题目分析:

 思路1:将数组分割成两部分,一部分从0到n-k-1(前n-k个),另一部分从n-k到n-1(后k个),然后将这两部分分别逆置,最后再整体逆置。

举例:

nums = {1,2,3,4,5,6,7}        k = 4

所以,我们可以封装一个单独的函数ReverseRange,用来逆置一个数组在一定范围的元素。

代码如下: 

//逆置函数
void ReverseRange(int* nums, int left, int right) {while (left <= right)//逆置[left,right]内的元素{int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}
}//三段逆置
void rotate(int* nums, int numsSize, int k) {k %= numsSize;ReverseRange(nums, 0, numsSize - k - 1);//逆置前n-k个ReverseRange(nums, numsSize - k, numsSize - 1);//逆置后k个ReverseRange(nums, 0, numsSize - 1);//整体逆置
}

这个方法的时间复杂度是O(N)

 思路2:将利用memcpy函数将原数组nums的后k个拷贝到临时数组temp中,再将原数组nums的前n-k个继续拷贝到临时数组temp中,最后再将temp拷贝到nums中。

代码如下: 

//将固定区间内的元素拷贝到临时数组temp中
void Reverse(int* nums, int numsSize, int k, int* temp) {k %= numsSize;int n = numsSsize;//用n代替sumsSize方便书写memcpy(temp, nums + N - k, k * sizeof(int));//拷贝后k个memcpy(temp + k, nums, (n - k) * sizeof(int));//拷贝前n-k个memcpy(nums, temp, n * sizeof(int));//将temp拷贝到nums中
}void rotate(int* nums, int numsSize, int k) {int temp[numsSize];//创建临时变量tempReverse(nums, numsSize, k, temp);//完成轮转数组的操作
}

这个方法的时间复杂度是O(N)。 

 

SUMUP结尾

数据结构就像数学题,需要刷题才能对它有感觉。之后还会更新数据结构相关的练习题、面试题,希望大家一起学习,共同进步~

如果大家觉得有帮助,麻烦大家点点赞,如果有错误的地方也欢迎大家指出~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性表(从数据结构的三要素出发)

文章目录 逻辑结构存储结构顺序存储链式存储单链表双链表循环单链表循环双链表静态链表 数据的操作顺序结构链式结构单链表双链表 逻辑结构 线性表是具有相同数据类型的 n ( n ≥ 0 ) n(n≥0) n(n≥0)个数据元素的有限序列&#xff0c;其中 n n n为表长&#xff0c;当 n 0 n0…

IT行业已经饱和?2024年报考计算机类专业还有出路吗?

&#x1f446;点击关注 获取更多编程干货&#x1f446; “高薪”光环加持&#xff0c;IT行业一直是不少人心仪的职业选择&#xff0c;计算机专业一度成为最热门的本科专业。 然而&#xff0c;正因报考计算机专业、想要入行IT行业的人越来越多&#xff0c;“行业饱和”、“人才…

MySQL(一) 库和表的基础操作

1. 数据库基础 1.1 什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 文件保存数据有以下几个缺点&#xff1a; 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质&#xff1a;磁盘内存 为了解…

增强ev代码签名证书2300

代码签名证书是软件开发者们确保软件完整性和安全性的重要工具之一。在各种类型的代码签名证书中&#xff0c;增强EV代码签名证书拥有许多独特的功能而受到企业开发者的欢迎&#xff0c;今天就随SSL盾小编了解增强EV代码签名证书的申请条件以及申请流程。 1.增强型EV代码签名证…

【小程序 按钮 表单 】

按钮 代码演示 xxx.wxml <view class"boss" hover-class"box"hover-start-time"2000"hover-stay-time"5000">测试文本<view hover-stop-propagation"true">子集</view><view>子集2</view>…

相关服务器介绍

服务器是一种高性能的计算机&#xff0c;它被设计用来为其他计算机或终端设备提供服务&#xff0c;如数据处理、文件存储、网络通信等。服务器通常具有强大的计算能力、大容量的存储空间和高效的网络连接能力。 常见的服务器种类及其特点 文件服务器 文件服务器主要负责中央存储…

Echarts图表使用

ECharts是一个用JS实现开源可视化库&#xff0c;它提供了丰富的图表类型和交互能力。使用户可以通过简单的配置生成各种各样的图表。 先安装ECharts图表直接下载echarts.min.js并用<script>标签引入也可以使用源代码版本echarts.js并用<script>标签引入&#xff0…

华为机考入门python3--(29)牛客29-字符串加解密

分类&#xff1a;字符变换 知识点&#xff1a; 字符是字母 char.isalpha() 字符是小写字母 char.islower() 字符是数字 char.isdigit() b变C chr((ord(b) - ord(a) 1) % 26 ord(A)) 题目来自【牛客】 # 加密 def encrypt_string(s):result ""for ch…

【算法】决策单调性优化DP

文章目录 决策单调性四边形不等式决策单调性 形式1法1 分治法2 二分队列例题 P3515Solution 形式2例题 P3195Solution 形式3例题 CF833BSolution 形式4例题Solution 后话 决策单调性 四边形不等式 定义: 对于二元函数 w ( x , y ) w(x,y) w(x,y)&#xff0c;若 ∀ a , b , …

强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长

更多资源请关注纽扣编程微信公众号 1 项目简介 商城是个从零到一的C端商城项目&#xff0c;包含商城核心业务和基础架构两大模块,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块&#xff0c;通过商城系统中复杂场景&#xff0c;给出对应解决方案。使用 …

Linux网络编程:HTTP协议

前言&#xff1a; 我们知道OSI模型上层分为应用层、会话层和表示层&#xff0c;我们接下来要讲的是主流的应用层协议HTTP&#xff0c;为什么需要这个协议呢&#xff0c;因为在应用层由于操作系统的不同、开发人员使用的语言类型不同&#xff0c;当我们在传输结构化数据时&…

webpack编译过程

webpack编译过程 初始化 此阶段&#xff0c;webpack会将**CLI参数**、**配置文件**、**默认配置**进行融合&#xff0c;形成一个最终的配置对象。​ 对配置的处理过程是依托一个第三方库yargs完成的 ​ 此阶段相对比较简单&#xff0c;主要是为接下来的编译阶段做必要的准备 ​…

Docker学习(3):镜像使用

当运行容器时&#xff0c;使用的镜像如果在本地中不存在&#xff0c;docker 就会自动从 docker 镜像仓库中下载&#xff0c;默认是从 Docker Hub 公共镜像源下载。 一、列出镜像列表 可以使用 docker images 来列出本地主机上的镜像。 各个选项说明&#xff1a; REPOSITORY&am…

【Linux学习】进程

下面是有关进程的相关介绍&#xff0c;希望对你有所帮助&#xff01; 小海编程心语录-CSDN博客 目录 1. 进程的概念 1.1 进程与程序 1.2 进程号 2. 进程的状态 2.1 fork创建子进程 2.2 父子进程间的文件共享 3. 进程的诞生与终止 3.1 进程的诞生 3.2 进程的终止 1. 进…

使用docker commit创建新镜像

前言 我们知道&#xff0c;从docker-hub上拉取的镜像所创建的容器是最小版本的&#xff0c;比如ubuntu内部是没有vim编辑器的&#xff0c;我们需要自己手动安装&#xff0c;但是当我们安装后假如有人把我们的容器误删了&#xff0c;那么我们再次根据原始镜像创建的容器就没有了…

CCF20230501——重复局面

CCF20230501——重复局面 代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n;cin>>n;char a[101][64];int i,j;for(i0;i<n;i){for(j0;j<64;j){cin>>a[i][j];}}int temp0,flag1;for(i0;i<n;i){flag1;for(j0;j<…

MySQL---通用语法及分类

目录 一、SQL通用语法 二、 SQL分类 1.DDL 1.1 DDL数据库操作 1.2 DDL表操作---查询 1.3 DDL表操作---创建​编辑 1.4 DDL表操作---数据类型 1.5 DDL表操作---修改 1.6 DDL表操作---删除 1.7 DDL总结 2. 图形化界面工具DataGrip 2.1 创建 2.2 使用 3. DML 3.1 DML介绍 3.2 DM…

521源码-免费源码下载-最新个人主页、个人引导页、网站导航页、引流页源码

这款源码采用HTML、CSS和JavaScript的组合&#xff0c;为您打造了一个既美观又实用的个人主页。通过简单的记事本工具打开源码文件&#xff0c;您可以轻松进行内容、文字以及样式上的修改&#xff0c;以满足您的个性化需求。 源码文件包含了完整的HTML结构、CSS样式表和JavaSc…

【深度学习实战—7】:基于Pytorch的多标签图像分类-Fashion-Product-Images

✨博客主页&#xff1a;王乐予&#x1f388; ✨年轻人要&#xff1a;Living for the moment&#xff08;活在当下&#xff09;&#xff01;&#x1f4aa; &#x1f3c6;推荐专栏&#xff1a;【图像处理】【千锤百炼Python】【深度学习】【排序算法】 目录 &#x1f63a;一、数据…