【数据结构】_时间复杂度相关OJ(力扣版)

目录

1. 示例1:消失的数字

思路1:等差求和

思路2:异或运算

思路3:排序+二分查找

2. 示例2:轮转数组

思路1:逐次轮转

思路2:三段逆置(经典解法)

思路3:开辟新数组


1. 示例1:消失的数字

题目链接:

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

思路1:等差求和

第一步:0—N利用求和公式计算总和,

第二步:减去数组中的所有元素的值,得到的差值即缺失的元素,

时间复杂度为O(N);

实现程序如下:

int missingNumber(int* nums, int numsSize) {int N=numsSize;// 0~numsSize共numsSize+1个数字int sum=(0+N)*(N+1)/2;for(int i=0;i<numsSize;i++){sum-=nums[i];}return sum;
}

思路2:异或运算

第一步:用0与数组中所有的数据都异或一遍;

第二步:所得结果再与0—N之间的数字异或一遍;

因为异或与顺序无关,存在的数字都异或了两次,最终结果都是0(同0异1),只有那个0—N之间存在然而数组中不存在的数字经过两次异或后结果为1,这个数就是缺失的数字。

实现程序如下:

int missingNumber(int* nums, int numsSize) {int x=0;for(int i=0;i<numsSize;i++){x^=nums[i];}for(int j=0;j<numsSize+1;j++){x^=j;}return x;
}

思路3:排序+二分查找

第一步:将数组元素进行排序,降序升序均可,以升序为例;

第二步:按照0~N的顺序依次查找,若下一个数不等于上一个数+1,则下一个数字为消失的数字;

分析时间复杂度:冒泡排序O(N)+二分查找log N 或 快排O(N)+二分查找log N二者均不满足复杂度要求,故不做详细解释。

2. 示例2:轮转数组

题目链接:

189. 轮转数组 - 力扣(LeetCode)

思路1:逐次轮转

对于N个元素向右轮转k个位置的轮转次数分析:

若不考虑轮转的周期性,则时间复杂度为O(K*N),(准确为O(K*(N-1)))

但由于数组长度定长,必然存在一些旋转的周期性问题。

真实旋转次数为k%=N,

最好的情况为旋转N的倍数次,即k%N==0,相当于没有旋转;

最坏的情况为k%N==N-1(量级为N),故时间复杂度为O(N^2);

void rotate(int* nums, int numsSize, int k) {k%=numsSize;// 旋转k轮while(k--){// 旋转1轮int tmp=nums[numsSize-1];for(int i=numsSize-2;i>=0;i--){nums[i+1]=nums[i];}nums[0]=tmp;}
}

存在问题:这种暴力求解的时间复杂度过高:

思路2:三段逆置(经典解法)

对于N个元素向右轮转k个位置的轮转,先将前n-k个逆置,再将后k个逆置,最后再整体逆置,即可达到预期轮转效果。此种情况下,时间复杂度为O(N)。(准确计算为O(2*N))

实现程序如下:

void reverse(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) {k%=numsSize;reverse(nums,0,numsSize-k-1);reverse(nums,numsSize-k,numsSize-1);reverse(nums,0,numsSize-1);
}

思路3:开辟新数组

额外开辟一个数组,将nums数组后k个元素存放至arr数组前k个位置,将nums数组前numsSize-k个元素存放至arr数组后numsSize-k个位置,再将arr元素依次赋值给nums元素:

#include<string.h>
void rotate(int* nums, int numsSize, int k) {int arr[numsSize];k%=numsSize;int n=numsSize;memcpy(arr, nums+n-k,sizeof(int)*k);memcpy(arr+k,nums,sizeof(int)*(n-k));memcpy(nums,arr,sizeof(int)*n);
}

注:若未采用memcpy,也可使用循环实现逐个拷贝:

void rotate(int* nums, int numsSize, int k) {int arr[numsSize];k%=numsSize;int n=numsSize;// 将nums数组后k个元素存放至arr数组前k个位置for(int i=0;i<=k-1;i++){arr[i]=nums[n-k+i];}// 将nums数组前n-k个元素存放至arr数组后n-k个位置for(int j=0;j<=n-k-1;j++){arr[k+j]=nums[j];}// 将arr元素依次赋值给nums元素for(int x=0;x<=n-1;x++){nums[x]=arr[x];}
}

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

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

相关文章

基于微信小程序的电子商城购物系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【linux】Linux 常见目录特性、权限和功能

目录特性默认权限主要功能/用途/根目录&#xff0c;所有目录的起点755文件系统的顶层目录&#xff0c;包含所有其他子目录和文件/bin基础二进制命令目录&#xff08;系统启动和修复必需的命令&#xff09;755存放所有用户可用的基本命令&#xff08;如 ls, cp, bash 等&#xf…

docker直接运行arm下的docker

运行环境是树莓派A 处理器是 arm32v6 安装了docker&#xff0c;运行lamp 编译安装php的时候发现要按天来算&#xff0c;于是用电脑vm下的Ubuntu系统运行arm的docker 然后打包到a直接导入运行就可以了 第一种方法 sudo apt install qemu-user-static 导入直接运行就可以了…

计算机网络一点事(22)

地址解析协议ARP ARP&#xff1a;查询Mac地址 ARP表&#xff08;ARP缓存&#xff09;&#xff1a;记录映射关系&#xff0c;一个数据结构&#xff0c;定期更新ARP表 过程&#xff1a;请求分组&#xff0c;响应分组 动态主机配置协议DHCP 分配IP地址&#xff0c;配置默认网关…

tomcat核心组件及原理概述

目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…

科技快讯 | OpenAI首次向免费用户开放推理模型;特朗普与黄仁勋会面;雷军回应“10后小学生深情表白小米SU7”

不用开口&#xff1a;谷歌 AI 帮你致电商家&#xff0c;价格、预约一键搞定 谷歌在1月30日推出Search Labs中的“Ask for Me”实验性功能&#xff0c;用户可利用AI代替自己致电商家咨询价格和服务。该功能已与美汽车修理厂和美甲沙龙店合作&#xff0c;用户需加入Search Labs并…

帆软 FCA -业务分析师认证学习

帆软 FCA -业务分析师认证学习 认证概述 适合人群 企业中有需求管理、指标梳理、业务逻辑梳理、项目规划等需求的人员&#xff0c;想提升综合数据能力、推进数据应用落地的业务/IT骨干。 具体-FCA-业务分析理论 考试要求&#xff1a; FCA-业务分析理论考试- 费用&#xff1a…

Vue.js路由管理与自定义指令深度剖析

Vue.js 是一个强大的前端框架,提供了丰富的功能来帮助开发者构建复杂的单页应用(SPA)。本文将详细介绍 Vue.js 中的自定义指令和路由管理及导航守卫。通过这些功能,你可以更好地控制视图行为和应用导航,从而提升用户体验和开发效率。 1 自定义指令详解 1.1 什么是自定义…

Maya软件安装步骤与百度网盘链接

软件简介&#xff1a; MAYA软件是Autodesk旗下的著名三维建模和动画软件。maya软件功能更为强大&#xff0c;体系更为完善&#xff0c;因此国内很多的三维动画制作人员都开始转向maya&#xff0c;maya软件已成为三维动画软件的主流。 百度网盘链接: https://pan.baidu.com/s…

kamailio的部分模块的解释及代码示例【文章由DeekSeek大模型提供】

以下是 Kamailio 中这些模块的详细说明及示例代码&#xff1a; 1. tls.so 作用&#xff1a;提供 TLS 支持&#xff0c;用于加密 SIP 通信。示例&#xff1a;loadmodule "tls.so" modparam("tls", "certificate", "/etc/kamailio/tls/serve…

深入理解linux中的文件(上)

1.前置知识&#xff1a; &#xff08;1&#xff09;文章 内容 属性 &#xff08;2&#xff09;访问文件之前&#xff0c;都必须打开它&#xff08;打开文件&#xff0c;等价于把文件加载到内存中&#xff09; 如果不打开文件&#xff0c;文件就在磁盘中 &#xff08;3&…

一个用于测试的 HL7 Server

说明 一个用于测试的 HL7 Server。在过NIST的认证时&#xff0c;需要演示检验数据通过HL7进行传输&#xff0c;所以写了这工具。 HL7的消息解析和编码使用了NHapi。包含两个服务&#xff1a; ReceiveServiceSendService 这2个服务都继承自 BaseService public class BaseSe…

使用 Go 和 gqlgen 实现 GraphQL API:实战指南

使用 Go 和 gqlgen 实现 GraphQL API&#xff1a;实战指南 在本文中&#xff0c;我将分享如何使用 Go 语言和 gqlgen 框架实现一个完整的 GraphQL API。我们将构建一个包含用户、文章和评论功能的博客系统 API。 技术栈 Gogqlgen (GraphQL 框架)MySQL (数据存储)Redis (缓存…

matlab快速入门(2)-- 数据处理与可视化

MATLAB的数据处理 1. 数据导入与导出 (1) 从文件读取数据 Excel 文件&#xff1a;data readtable(data.xlsx); % 读取为表格&#xff08;Table&#xff09;CSV 文件&#xff1a;data readtable(data.csv); % 自动处理表头和分隔符文本文件&#xff1a;data load(data.t…

洛谷题目 P5994 [PA 2014] Kuglarz 题解 (本题较难)

题目传送门&#xff1a; P5994 [PA 2014] Kuglarz - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言&#xff1a; 本题涉及到最小生成树中的 kruskal 算法和并查集算法&#xff0c;图论基础概念两大知识点&#xff0c;瞎按对莱索没有学过图论的或最小生成树的可能会对这道…

消息队列篇--通信协议篇--网络通信模型(OSI7层参考模型,TCP/IP分层模型)

一、OSI参考模型&#xff08;Open Systems Interconnection Model&#xff09; OSI参考模型是一个用于描述和标准化网络通信功能的七层框架。它由国际标准化组织&#xff08;ISO&#xff09;提出&#xff0c;旨在为不同的网络设备和协议提供一个通用的语言和结构&#xff0c;以…

C# Winform制作一个登录系统

using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登录 {p…

10.7 LangChain Models深度解析:解锁大模型集成与调优的全景攻略

LangChain Models深度解析:解锁大模型集成与调优的全景攻略 关键词: LangChain Models模块、大模型集成、LLM调用优化、多模型管理、本地模型部署 一、Models模块的定位:大模型应用的“中央调度器” 传统开发的痛点: 碎片化集成:每个模型需单独编写适配代码性能黑洞:缺…

记一次STM32编译生成BIN文件过大的问题(基于STM32CubeIDE)

文章目录 问题描述解决方法更多拓展 问题描述 最近在一个项目中使用了 STM32H743 单片机&#xff08;基于 STM32CubeIDE GCC 开发&#xff09;&#xff0c;它的内存分为了 DTCMRAM RAM_D1 RAM_D2 …等很多部分。其中 DTCM 的速度是比通常的内存要快的&#xff0c;缺点是不支持…

996引擎 -地图-添加安全区

996引擎 -地图-添加安全区 文件位置配置 cfg_startpoint.xls特效效果1345参考资料文件位置 文件位置服务端D:\996M2-lua\MirServer-lua\Mir200客户端D:\996M2-lua\996M2_debug\dev配置 cfg_startpoint.xls 服务端\Mir200\Envir\DATA\cfg_startpoint.xls 填歪了也有可能只画一…