LeetCode | 17.04.消失的数字和189.旋转数组

LeetCode | 17.04.消失的数字和189.旋转数组

文章目录

  • LeetCode | 17.04.消失的数字和189.旋转数组
  • 17.04.消失的数字
    • 方法一:
    • 方法二:
    • 方法三:
      • 方法二的代码
      • 方法三的代码
  • 189.旋转数组
    • 思路一
    • 思路二
    • 思路三

17.04.消失的数字

OJ链接

  • 这里题目要求在时间复杂度上O(n)我们介绍三种方法,看看哪种方法适合这道题~~

在这里插入图片描述


方法一:

  1. 先冒泡排序
  2. 遍历,当前值+1,不等于下一个数

这个时间复杂度是O(N^2)


方法二:

  1. 将数组的每个元素异或0
  2. 遍历,再将异或出来的结果每个再异或

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


方法三:

  1. 0到n等差数列公式计算和((首项 + 尾项) * 项数)/2
  2. 依次减掉数据中的值,剩下的就是消失的数字

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


  • 可见只有方法二和方法三符合题目要求,下面我们就写一下这个代码

方法二的代码

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

方法三的代码

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

189.旋转数组

OJ链接

在这里插入图片描述

  • 我们这个题肯有些同学在C语言的时候做过

思路一

我们先来看思路一:

在这里插入图片描述

  • 思路一的时间复杂度是多少?
    • 可能有的同学算出来的是O(N*K),不完全正确~~
  • 最好的情况:k % N = 0,k = 7,旋转0次!!!是O(1)。k是N的倍数时,不需要旋转~~
  • 最坏的情况:k % N = N - 1时,比如13次旋转的最多,20次最多…
  • 所以这个题的真正复杂度是O(N*(N-1))—>O(N^2)

那么我们要求时间复杂度是O(N),那么我们怎么优化呢?


思路二

我们这里就要看思路二:

在这里插入图片描述

  • 这里很明显是O(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){if(k>numsSize){k %=numsSize;}reverse(nums,0,numsSize-1);reverse(nums,0,k-1);reverse(nums,k,numsSize-1);
}
  • 注意这里k一定要%numsSize,否则会报错~~

思路三

空间换时间

在这里插入图片描述

  • 这里的时间复杂是O(N),空间复杂度是O(N)

代码如下:

void rotate(int* nums, int numsSize, int k) {k %= numsSize;int tmp[numsSize];int j = k;//拷贝前n-k个for (int i = 0; i < numsSize - k; i++) {tmp[j++] = nums[i];}//拷贝后k个j = 0;for (int i = numsSize - k; i < numsSize; i++) {tmp[j++] = nums[i];}//拷贝回原数组for (int i = 0; i < numsSize; i++) {nums[i] = tmp[i];}
}

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

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

相关文章

Ansible playbook

目录 playbook playbook 的简介 playbooks 各部分组成 基础的playbook剧本编写实例 实例1&#xff1a;playbook编写 apache的yum安装部署剧本 playbook的定义、引用变量 基础变量的定义与引用 引用fact信息中的变量 playbook中的when条件判断和变量循环使用 when条件…

k8s、pod

Pod k8s中的port【端口&#xff1a;30000-32767】 port &#xff1a;为Service 在 cluster IP 上暴露的端口 targetPort&#xff1a;对应容器映射在 pod 端口上 nodePort&#xff1a;可以通过k8s 集群外部使用 node IP node port 访问Service containerPort&#xff1a;容…

【SpringMVC篇】讲解RESTful相关知识

&#x1f38a;专栏【SpringMVC】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f384;REST简介&#x1f33a;RESTful入门案例⭐案例一⭐…

Django 尝试SSE报错 AssertionError: Hop-by-hop headers not allowed 的分析

情况描述 近期计划测试一下django对日志打印的支持&#xff0c;一般都是用websocket的方式&#xff0c;想测试一下SSE (Server-sent events)的服务端推送&#xff0c;发现过程中存在报错&#xff1a; Traceback (most recent call last):File "D:\Software\Anaconda3\li…

机器学习-特征选择:如何使用互信息特征选择挑选出最佳特征?

一、引言 特征选择在机器学习中扮演着至关重要的角色&#xff0c;它可以帮助我们从大量的特征中挑选出对目标变量具有最大预测能力的特征。互信息特征选择是一种常用的特征选择方法&#xff0c;它通过计算特征与目标变量之间的互信息来评估特征的重要性。 互信息是信息论中的一…

腾讯待办关停后怎么恢复使用?可自动设置提醒时间的待办工具

你是否曾经有过这样的经历&#xff1a;突然想到一个重要的任务&#xff0c;但却忘记立即记录下来&#xff0c;导致事后无法及时完成&#xff1f;我们的日常生活充满了琐碎的任务&#xff0c;而记录待办事项并设置提醒时间&#xff0c;可以帮助我们更好地组织和管理时间。 记录…

相关性网络图 | 热图中添加显著性

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 本期教程 写在前面 此图是一位同学看到后&#xff0c;想出的一期教程。 最近&#xff0c;自己的事情比较多&#xff0c;会无暇顾及社群和公众号教程。 1 安装和加载相关的R包 library(ggraph) library(tidy…

标配率破8成,新能源车2025年全面标配!哪些OTA供应商正在领跑

伴随着汽车智能化的加速渗透&#xff0c;软件在线升级&#xff08;OTA&#xff09;也在快速实现从基于软件层的SOTA &#xff0c;到硬件层的FOTA的全面普及。 其中&#xff0c;在行业内&#xff0c;SOTA普遍是指车辆软件应用层的升级&#xff0c;通过网络将文件从云端服务器下…

stream流—关于Collectors.toMap使用详解

目录 使用规则&#xff1a;1.将list转成以id为key的map&#xff0c;value是id对应的某对象2.假如id存在重复值&#xff0c;则会报错Duplicate key xxx3.想获得一个id和name对应的Map<String, String>3.1 name为空时null3.2 id重复时 4.分组 使用groupingby 使用规则&…

Git基础命令实践

文章目录 简介git的安装配置git的安装git的配置 git使用的基本流程创建版本库时光机穿梭版本回退工作区和暂存区管理修改撤销修改删除文件 远程仓库添加远程库从远程库克隆 总结 简介 本文主要记录了我在学习git操作的过程&#xff0c;以及如何使用GitHub。建议先参考廖雪峰的…

AI:45-基于深度学习的声纹识别

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…

Linux--文件操作

1.什么是文件 对于文件来说&#xff0c;文件文件内容文件属性&#xff1b;对于文件来说&#xff0c;只有两种操作&#xff0c;对内容的修改和对文件属性的修改&#xff0c;这就是文件的范畴。 对于存放在磁盘上的文件&#xff0c;我们需要通过进程来进行访问&#xff0c;访问文…