算法的时间复杂度和空间复杂度-例题

一、消失的数字

. - 力扣(LeetCode)

本题要求的时间复杂度是O(n) ,所以我们不能用循环嵌套;

解法一: 

int missingNumber(int* nums, int numsSize){int sum1=0;for(int i=0;i<=numsSize;i++){sum1+=i;}int sum2=0;for(int i=0;i<numsSize;i++){sum2+=nums[i];}return sum1-sum2;
}

先把0到n的数字加起来,再把原数组里面的所有元素加起来,再用前者减去后者,得出的就是消失的数字;

解法二:

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

 相同数字互相异或得到0,0和一个非零数字异或得到这个非零数字;先把原本没有消失的有序数列互相异或一遍,再和这个消失了一个数字的数组里面的数据异或一遍,因为相同的数字异或之后为0,没有消失的数据一定是成对出现的,那么最终的结果就是有序数列里面单独剩下的数据,就是消失的数字。


二、轮转数组

. - 力扣(LeetCode)

 解法一:

void rotate(int* nums, int numsSize, int k) {int time=k%numsSize;for(int i=0;i<time;i++){int right=nums[numsSize-1];for(int j=numsSize-2;j>=0;j--){nums[j+1]=nums[j];}nums[0]=right;} 
}

这个解法的时间复杂度是O(n^2);假设数组中的元素个数是n,time最坏是n-1,最好是0,嵌套在里面的循环是n-1次,所以是O(n^2);

每次先保留数组的最后一个数据,再把除了这个数据的前面的数据整体向后移动一格,最后再把下标为0的数据赋值为保留的那个最后的数据;

这种方法可行,但是再LeetCode上面无法通过,超出时间限制;

解法二:

void reverse(int* arr,int len)
{int left = 0;int right = len - 1;while (left <= right){int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;left++;right--;}
}
void rotate(int* nums, int numsSize, int k) {k%=numsSize;reverse(nums, numsSize - k);reverse(nums+(numsSize-k), k);reverse(nums, numsSize);
}

分段逆置,再整体逆置;

解法三:

void _rotate(int* nums,int numsSize,int k, int* tmp)
{k%=numsSize;int n=numsSize;memcpy(tmp,nums+n-k,sizeof(int)*k);memcpy(tmp+k,nums,sizeof(int)*(n-k));memcpy(nums,tmp,sizeof(int)*n);
}
void rotate(int* nums, int numsSize, int k) {int* tmp=(int*)malloc(sizeof(int)*numsSize);_rotate(nums,numsSize,k,tmp);
}

重新开辟一个数组,使用memcpy内存操作函数去把逆置的数据从nums里面copy到tmp里面,最终再把tmp里面的所有数据copy到nums里面,最终的不能直接写nums=tmp,要用内存操作函数,这样才能让nums在内存上发生改变。

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

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

相关文章

成为CMake砖家(3):Windows安装make.exe

大家好&#xff0c;我是白鱼。相信很多朋友已经在用 CMake 做交叉编译了&#xff0c; 而交叉编译往往少不了 make.exe, 这篇来讲讲 make.exe 在 Windows 上的安装。 1. 交叉编译需要 generator CMake 本身是一个 meta build tool&#xff0c; 或者说它是派发任务到具体的 bui…

云计算练习题

第一题&#xff1a;每周日晚上11点59分需要将/data目录打包压缩到/mnt目录下并以时间命名 #crontab -e 59 23 * * 7 /bin/tar czvf /mnt/date %F-data.tar.gz /data 59 23 * * 7 /bin/tar czvf /mnt/date %T.tar.gz /data 第二题&#xff1a;查找出系统中/application目录下所有…

数据库使用SSL加密连接

简介 数据库开通SSL加密连接是确保数据传输过程中安全性的关键措施&#xff0c;它通过加密数据、验证服务器身份、保护敏感信息、维护数据完整性和可靠性&#xff0c;同时满足行业标准和法规要求&#xff0c;进而提升用户体验和信任度&#xff0c;为企业的数据安全和业务连续性…

离线语音识别芯片在智能生活中的应用

离线语音识别芯片&#xff0c;这一技术正逐渐渗透到我们日常生活的每一个角落&#xff0c;为众多产品带来前所未有的智能体验。它能够应用到多种产品中&#xff0c;‌包括但不限于&#xff1a;‌ 1、智能音箱&#xff1a;‌语音识别芯片作为智能音箱的核心&#xff0c;‌使用户…

钢铁与不锈钢区别

钢铁与不锈钢是两种比较特殊的金属材料&#xff0c;它们之间的主要区别可以从以下几个方面进行探讨&#xff1a; 钢属碳素钢&#xff1a;钢铁是含碳量介于0.02%至1.7%之间的铁合金&#xff0c;主要成分是铁&#xff08;Fe&#xff09;和碳&#xff0c;其中铁约占80%以上。它们…

Linux开发:Ubuntu22.04安装libcurl4

libcurl是一个跨平台的网络协议库&#xff0c;支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权&#xff0c;HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传&#xff0c;代理&#xff0c;cookies,和用户认证等&#xff0c;使用…

DNS域名解析原理及配置

目录 一、DNS原理 什么是DNS DNS 的作用 DNS 的工作原理 1. 用户输入域名 2. 查询本地 DNS 服务器 3. 递归查询 4. 根域名服务器 5. 顶级域名服务器 6. 权威 DNS 服务器 7. 返回结果 两种查询方式 二、DNS服务器系统类型 主域名服务器 从域名服务器 缓存域名服务…

搭建一个高并发的Web商品推荐系统,如何涉及软件架构?

搭建一个高并发的Web商品推荐系统&#xff0c;如何涉及软件架构 在搭建一个高并发的Web商品推荐系统时&#xff1a; 微服务架构&#xff1a; 为了支持高并发&#xff0c;我们可以采用微服务架构&#xff0c;将系统拆分成小型、独立的服务&#xff0c;每个服务专注于特定的功…

昇思25天学习打卡营第25天|GAN图像生成

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) GAN图像生成 模型简介 生成式对抗网络(Generative Adversarial Networks&#xff0c;GAN)是一种生成式机器学习模型&#xff0c;是近年来复杂分布上无监督学习最具前景的方法之一。 GAN论文逐…

C++ 入门11:虚函数和多态

往期回顾&#xff1a; C 入门08&#xff1a;运算符重载-CSDN博客 C 入门09&#xff1a;友元函数和友元类-CSDN博客 C 入门10&#xff1a;继承和派生类-CSDN博客 C 入门第十一天&#xff1a;虚函数和多态 一、前言 在前面的文章学习中&#xff0c;我们了解了类和对象的基础知识…

1.32、 基于区域卷积神经网络(R-CNN)的停车标志检测(matlab)

1、基于区域卷积神经网络(R-CNN)的停车标志检测原理及流程 基于区域卷积神经网络&#xff08;R-CNN&#xff09;的停车标志检测原理及流程如下&#xff1a; 原理&#xff1a; R-CNN 是一种用于目标检测的深度学习模型&#xff0c;其核心思想是首先在输入图像中提取出候选区域&…

优化调试体验:让PyCharm的调试过程飞起来

优化调试体验&#xff1a;让PyCharm的调试过程飞起来 PyCharm是一款功能强大的Python集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了许多便利的调试工具来帮助开发者快速定位和解决问题。然而&#xff0c;在某些情况下&#xff0c;用户可能会遇到调试过程缓慢的…

请结合一个问题bug,帮忙梳理一下DecorView和Window之间的关系

在Android开发中&#xff0c;DecorView 和 Window 是两个核心概念&#xff0c;它们在用户界面显示和布局管理中扮演着重要角色。为了更好地理解它们之间的关系&#xff0c;并通过一个假设的bug场景来梳理它们&#xff0c;我们可以从以下几个方面进行阐述。 1. Window 的概念 …

Typescript Vue3中的defineProps接收参数,并withDefaults设置默认值

1. defineProps&#xff1a;接收父组件传递的参数 2. withDefaults&#xff1a;接收时设置默认值 这两个api都不需要引入&#xff0c;可直接在setup中使用 1. person.vue接收参数 <script setup lang"ts">import type {Persons} from /types// 接收list 可不…

springboot3 web

springboot web配置 springboot web的配置有&#xff1a; SpringMvc配置的前缀为&#xff1a;spring.mvcweb场景的通用配置为&#xff1a;spring.web文件上传的配置为&#xff1a;spring.servlet.multipart服务器相关配置为&#xff1a;server 接管SpringMVC 的三种方式 方…

【算法】无重复字符的最长子串

难度&#xff1a;中等 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 示例&#xff1a; 示例1&#xff1a; 输入&#xff1a;s “abcabcbb” 输出&#xff1a;3 解释&#xff1a;因为无重复字符的最长子串是 “abc”&#xff0c;所以…

1.26、基于概率神经网络(PNN)的分类(matlab)

1、基于概率神经网络(PNN)的分类简介 PNN(Probabilistic Neural Network,概率神经网络)是一种基于概率论的神经网络模型,主要用于解决分类问题。PNN最早由马科夫斯基和马西金在1993年提出,是一种非常有效的分类算法。 PNN的原理可以简单概括为以下几个步骤: 数据输入层…

对LinkedList和链表的理解

一.ArrayList的缺陷 二.链表 三.链表部分相关oj面试题 四.LinkedList的模拟实现 五.LinkedList的使用 六.ArrayList和LinkedList的区别 一.ArrayList的缺陷: 1. ArrayList底层使用 数组 来存储元素&#xff0c;如果不熟悉可以来再看看&#xff1a; ArrayList与顺序表-CSDN…

2024年7月13日全国青少年信息素养大赛Python复赛小学高年级组真题

第一题 题目描述 握情况。他决定让每个人输入一个正整数 N (0≤N≤1000)&#xff0c;然后计算并输出(5*N)的值。请用 在一个神秘的王国里&#xff0c;国王希望通过一个简单的测试来评估他的子民对基 础数学运算的掌 Python 编写程序&#xff0c;程序执行后要求用户输入一个正…