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

一、消失的数字

. - 力扣(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在内存上发生改变。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C到C嘎嘎的衔接篇

本篇文章&#xff0c;是帮助大家从C向C嘎嘎的过渡&#xff0c;那么我们直接开始吧 不知道大家是否有这样一个问题&#xff0c;学完C的时候感觉还能听懂&#xff0c;但是听C嘎嘎感觉就有点难度或者说很难听懂&#xff0c;那么本篇文章就是帮助大家从C过渡到C嘎嘎。 C嘎嘎与C的区…

MPC轨迹跟踪控制器推导及Simulink验证

文章目录 MPC轨迹跟踪控制器推导及Simulink验证MPC的特点MPC轨迹跟踪控制器推导一 系统离散化二 预测区间状态和变量推导三 代价函数推导四 优化求解 <center> 基于MPC的倒立摆控制系统相关资料Reference&#xff1a; MPC轨迹跟踪控制器推导及Simulink验证 MPC的特点 多…

SAP 消息输出 - Adobe Form

目录 1 安装链接 2 前台配置 - Fiori app 2.1 维护表单模板 (maintain form templates) 2.2 管理微标 (manage logos) 2.3 管理文本 (manage texts) 3 后台配置 3.1 定义表单输出规则 3.2 分配表单模板 SAP 消息输出&#xff0c;不仅是企业内部用来记录关键业务操作也是…

Win11任务栏当中对 STM32CubeMX 的堆叠问题

当打开多个 CubeMX 程序的时候&#xff0c;Win11 自动将其进行了堆叠&#xff0c;这时候就无法进行预览与打开。 问题分析&#xff1a;大部分ST的工具都是基于 JDK 来进行开发的&#xff0c;Win11 将其识别成了同一个 Binary 但是实际上他们并不是同一个&#xff0c;通过配置…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

C语言详解(结构体)

Hi~&#xff01;这里是奋斗的小羊&#xff0c;很荣幸各位能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎~~ &#x1f4a5;个人主页&#xff1a;小羊在奋斗 &#x1f4a5;所属专栏&#xff1a;C语言 本系列文章为个人学习笔记&#xff0c;在这里撰写成文一…

《后端程序猿 · EasyPOI 导入导出》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

Android OkHttp3中HttpLoggingInterceptor使用

目录 一 概述1.1 日志级别 二 使用2.1 引入依赖2.2 创建对象2.3 添加拦截器 三 结果展示3.1 日志级别为BODY3.2 日志级别为BASIC3.3 日志级别为HEADERS 参考 一 概述 HttpLoggingInterceptor是OkHttp3提供的拦截器&#xff0c;用来记录HTTP请求和响应的详细信息。 1.1 日志级…

Dify中的经济索引模式实现过程

当索引模式为经济时&#xff0c;使用离线的向量引擎、关键词索引等方式&#xff0c;降低了准确度但无需花费 Token。 一.提取函数**_extract** 根据不同文档类型进行内容的提取&#xff1a; def _extract(self, index_processor: BaseIndexProcessor, dataset_document: Data…

pico+unity预设配置

picosdk中有很多预设的配置、使用预设配置的方法有 1、创建 XR Origin、展开 XR Origin > Camera Offset&#xff0c;选中 LeftHand Controller。点击 XR Controller (Action-Based) 面板右上角的 预设 按钮 2、打开Assets\Samples\XR Interaction Toolkit\2.5.2\Starter A…

《人工智能 从小白到大神》:一本让你彻底掌握AI的书

在当今这个快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为改变世界的关键力量。你是否曾想过&#xff0c;如何从一个对AI一无所知的小白&#xff0c;成长为一名真正的AI大神&#xff1f;今天&#xff0c;我要向大家推荐一本能够帮助你实现这一目标的书…

51单片机11(蜂鸣器硬件设计和软件设计)

一、蜂鸣器硬件设计 1、 2、上面两张图&#xff0c;是针对不同产品的电路图。像左边这一块&#xff0c;是我们的A2&#xff0c;A3&#xff0c;A4的一个产品对应的一个封闭器的硬件电路。而右边的这一块是对应的A5到A7的一个硬件电路。因为A5到A7的一个产品&#xff0c;它的各…

Python和C++全球导航卫星系统和机器人姿态触觉感知二分图算法

&#x1f3af;要点 &#x1f3af;马尔可夫随机场网格推理学习 | &#x1f3af;二维伊辛模型四连网格模型推理 | &#x1f3af;统计物理学模型扰动与最大乘积二值反卷积 | &#x1f3af;受限玻尔兹曼机扰动和最大乘积采样 | &#x1f3af;视觉概率生成模型测试图像 &#x1f3…

关于文档理解相关工作的一些总结

过去四年时间&#xff0c;都在处理结构化数据的存储优化相关的工作。最近一段时间在做RAG相关的工作。非结构数据的存储与检索&#xff0c;接触的也越来越多。这篇文章聊聊最近一段时间关于文档理解方面的一些心得。 文档理解 文档理解旨在从非结构化文档中提取信息并将其转化…

推荐一款uniapp拖动验证码插件

插件地址&#xff1a;易盾验证码 - DCloud 插件市场 具体使用方式访问插件地址自行获取

JVM:SpringBoot TomcatEmbeddedWebappClassLoader

文章目录 一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系 一、介绍 TomcatEmbeddedWebappClassLoader 是 Spring Boot 在其内嵌 Tomcat 容器中使用的一个类加载器&#xff08;ClassLoader&#xff09;。在 Spring Boot 应用中&#…

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(八)-通过无人机进行无线接入

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…

实现多层感知机

目录 多层感知机&#xff1a; 介绍&#xff1a; 代码实现&#xff1a; 运行结果&#xff1a; 问题答疑&#xff1a; 线性变换与非线性变换 参数含义 为什么清除梯度&#xff1f; 反向传播的作用 为什么更新权重&#xff1f; 多层感知机&#xff1a; 介绍&#xff1a;…

LabVIEW红外热波图像缺陷检

开发使用LabVIEW开发的红外热波图像缺陷检测系统。该系统结合红外热像仪、工业相机和高效的数据采集硬件&#xff0c;实现对工件表面缺陷的自动检测和分析。通过LabVIEW的强大功能&#xff0c;系统能够实时采集、处理和显示红外热波图像&#xff0c;有效提高了检测的精度和效率…