Leetcode之消失的数字轮转数组

news2024/11/26 6:02:49

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 一、消失的数字

一、消失的数字
二、旋转数组



提示:以下是本篇文章正文内容,下面案例可供参考

一、消失的数字

在这里插入图片描述
这题找出消失的一个数字,俗称找单身狗,要求时间复杂度为O(n)
这题我有两种题解
(1)用按位异或 ^ 操作
^ :两个数的二进制位异或,二进制位相同为0,相异为1如:
x = 1, y = 2
x 的二进制位表示为00000000 00000000 00000000 00000001
y的二进制位表示为00000000 00000000 00000000 00000010
x^y = 00000000 00000000 00000000 00000011 表示为十进制为 x^y=3
而这道题可以用按位异或来求解,先创建一个常量tmp = 0,tmp与nums数组中第一个元素异或得到的结果再依次与下一个异或,直到异或完数组中全部内容,将得出的结果再与从0~n中每一个整数异或,最后得出那个单身狗。

int missingNumber(int* nums, int numsSize)
{
    int tmp = 0;
    for (int i = 0; i < numsSize; i++)
    {

        tmp ^= nums[i];
    }
    for (int i = 0; i <=numsSize; i++)//由于数组内容从0~n消失了一个,那么在从0~n的整数中就要多一个
    {
        tmp ^= i;
    }

    return tmp;
}

第二种方法是将从0~n内的所有整数加起来再减去原数组之和,最后得出消失的那个数字


```c
int missingNumber(int* nums, int numsSize)
{
    int i = 0;
    
    int sum1 = 0;
    int sum = 0;
    for (i = 0; i <= numsSize; i++)//先求出0~n之和
    {

        sum1 = sum1 + i;
    }
    
    for (i = 0; i < numsSize; i++)
    {
        sum1 = sum1 - *(nums + i);//0~n整数和依次减去数组每一位最后结果返回
    }

    return sum1;
}

二、轮转数组
在这里插入图片描述
给定一个数字k,将数组轮转k次,在这里轮转的时候切记不可重复轮转,也就是k <= n,当k>n时要做取模运算
这题可以一个个旋转,就是创建一个变量将数组最后一个数存储起来,然后数组每一个元素向后挪,空出第一个位置,将存储起来的值赋给空出来的那个位置,循环k次,但是这样时间复杂度达到O(n^2)不可取题中要求时间复杂度为O(N),还有一种是再开一个数组,将要轮转的数依次取到新开的数组中,然后再将源数组从0~numsSize-k-1取到新数组中,最后将新数组中的元素更换到源数组中,但是这样就以空间换取时间,不是最优的,下面分区间逆置,然后再总体逆置,达到轮转数组的效果
上代码

void reserve(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=k%numsSize;
    }
//分区间逆置
    reserve(nums, numsSize-k, numsSize-1);
    reserve(nums, 0, numsSize-k-1);
    reserve(nums, 0, numsSize-1);

}

数组整体是这样的在这里插入图片描述
分区间逆置numsSize-k~numsSize-1后变为
在这里插入图片描述
然后区间逆置0~numsSize-k-1后变为
在这里插入图片描述
然后再总体逆置
在这里插入图片描述
一下是逆置函数


```c
void reserve(int* nums, int left, int right)
{
    while(left<right)//控制逆置次数
    {
     //交换
    int tmp = nums[left];
    nums[left] = nums[right];
    nums[right] = tmp;
    left++;
    right--;

    }

}








---

# 总结
我的题解也许有诸多不足,请各位大佬帮忙指正

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

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

相关文章

自行车出口欧盟CE认证,新版自行车标准ISO 4210:2023与ISO 8098:2023发布

2023年1月&#xff0c;国际标准化组织ISO发布了新版“自行车以及儿童自行车的测试标准”&#xff0c;即ISO 4210&#xff1a;2023以及ISO 8098:2023&#xff0c;用于取代了SO 4210&#xff1a;2015以及ISO 8098:2015。新版标准一经发布&#xff0c;立即生效。欧盟标准化委员会C…

使用 Python 抓取和优化所有网站图像

&#xff0c;我发布了一个通过FTP自动优化新图像的教程。这次我们将抓取整个网站&#xff0c;并在本地优化我们遇到的图像&#xff0c;按URL组织。请注意&#xff0c;这个简短但中级的脚本不适用于大型站点。首先&#xff0c;所有图像都转储到一个文件夹中。为每个页面创建一个…

ASP.NET 网站开发(联合增,删,改,查)

联合多表查询查询&#xff1a; linqDBDataContext db new linqDBDataContext(); stu d db.stu.Where(p > p.sid 2).FirstOrDefault(); if (d ! null) { var Marks d.marks; GridView1.DataSource Marks; GridView1.DataBind(); db.Su…

理解B树及B+树、B*树

目录 一.B树概念 二.B树插入思路 二.B树分部实现 1.树节点类 2.B树成员结构 3.查找函数 4.插入函数&#xff08;核心&#xff09; 5.插入关键值 6.中序遍历&#xff08;有序&#xff09; 三.B树实现总代码 四.B树性能分析 五.B树和B*树 1.B树 2.B*树 3.总结 六…

Android上架构建KeyStore应用签名

Android上架构建KeyStore应用签名Android上架构建KeyStore应用签名构建签名生成密钥读取填写使用Android上架构建KeyStore应用签名 我们的应用在上架前需要构建应用签名&#xff0c;使用的是Java进行构建 构建签名 需要有Java环境&#xff0c;注意尽量使用JDK8&#xff01;使…

CIMCAI super unmanned intelligent gate container damage detect

世界港航人工智能领军者企业CIMCAI中集飞瞳打造全球最先进超级智能闸口无人闸口ceaspectusG™视频流动态感知集装箱箱况残损检测箱况残损识别率99%以上&#xff0c;箱信息识别率99.95%以上World port shipping AI leader CIMCAIThe worlds most advanced super intelligent gat…

RK3588 PMIC/Power电路 PCB 设计指南

1、VDD_LOGIC&#xff0c;VDD_GPU&#xff0c;VDD_NPU&#xff0c;VDD_CPU电源的 DC-DC 远端反馈设计。100ohm反馈电阻需要靠近输出电容放置&#xff0c;电阻一端连接到 DC-DC 输出电容&#xff0c;另一端连接到PMIC 的VOUT 反馈脚上&#xff0c;并同时连接到 RK3588 电源管脚同…

网络信息安全(四)

IIS WEB服务器 服务器配置静态IP 安装WEB服务软件 打开软件 检查80端口是否打开 DNS解析不同域名站点 新建两个网页京东和淘宝 安装DNS组件并创建两个区域 新建主机 XP上指定DNS 正常情况下同一个服务器上一个端口只提供一个服务 添加主机头值 XP验证 IIS FTP服务器 FTP工作模式…

【20230221】【剑指1】排序(中等)II

1.最小的K个数sort直接用太无脑了&#xff0c;虽然底层实现也是快排&#xff0c;但是快排还是得会写啊快速排序快速排序算法有两个核心点&#xff0c;分别为 “哨兵划分” 和 “递归” 。哨兵划分操作&#xff1a; 以数组某个元素&#xff08;一般选取首元素&#xff09;为 基准…

教你编写SQLMap的Tamper脚本过狗

测试环境 最新版某狗 测试方法 安全狗其实是比较好绕的WAF&#xff0c;绕过方法很多&#xff0c;但这里我们就用一种&#xff1a;注释混淆 一招鲜吃遍天 注释混淆&#xff0c;其实就是在敏感位置添加垃圾字符注释&#xff0c;常用的垃圾字符有/、!、*、%等 这里再解释一下…

nodejs基于vue高校学报论文在线投稿系统

在新发展的时代&#xff0c;众多的软件被开发出来&#xff0c;给用户带来了很大的选择余地&#xff0c;而且人们越来越追求更个性的需求。在这种时代背景下&#xff0c;高校只能以工作人员为导向&#xff0c;以稿件的持续创新作为高校最重要的竞争手段。 可定制框架:ssm/Sprin…

铅酸蓄电池废水除铅项目,出水做到0.05mg/l

某集团公司铅酸蓄电池废水除铅项目 工艺选择 沉淀系统过滤系统螯合树脂除铅系统 工艺原理 铅离子沉淀后进入螯合树脂除铅树脂 项目背景 铅酸蓄电池具有可逆性、电压特性平稳、放电量大、造价低廉等优点&#xff0c;应用于国民经济各个领域&#xff0c;但在其生产过程中&…

vue3 布局样式的原理

style scoped <style scoped > 它的 CSS 只作用于当前组件中的元素&#xff0c;如果子组件只有一个根元素&#xff0c;也会被渗透 原理&#xff1a; 当我们再组建中使用scoped时&#xff0c;vue会自动为组件中所有元素生成一个随机的属性&#xff0c;形如&#xff1a;da…

01背包—动态规划

一、背包问题概述&#xff1a; 二、暴力解法&#xff1a; 重量价值物品0115物品1320物品2430 背包最大容量为4。 每一个物品有两个状态&#xff0c;“取”或者“不取”。利用回溯法可以暴力枚举所有物品的状态的排列组合状态&#xff0c;与背包最大容量比较就可以求得最大的价…

Cloudflared 内网穿透 使用记录

Cloudflared 内网穿透前提创建cloudflared tunnel我使用的服务前提 你必须要有一个域名&#xff0c;并且可以改域名的dns解析服务商到cloudflare 1.登录到cloudflare后台&#xff0c;点击添加站点 2.输入自己的域名&#xff0c;下一步选择免费套餐 3.他会搜索这个域名下已有…

iOS自动化打包

测试阶段一般会发生这样的场景&#xff0c;测试拼命的提 Bug&#xff0c;开发拼命的改 Bug&#xff0c;改完重新打包发给测试进行复测&#xff0c;那这个过程中频繁的打包肯定是不可避免的。如果使用 Xcode 打包&#xff0c;在打包期间我们是无法改剩余的 Bug 或进行其他模块的…

大规模 IoT 边缘容器集群管理的几种架构-3-Portainer

前文回顾 大规模 IoT 边缘容器集群管理的几种架构-0-边缘容器及架构简介大规模 IoT 边缘容器集群管理的几种架构-1-RancherK3s大规模 IoT 边缘容器集群管理的几种架构-2-HashiCorp 解决方案 Nomad大规模 IoT 边缘容器集群管理的几种架构-3-Portainer &#x1f4da;️Reference…

你好,Cartesi 社区资助计划

这是一个由社区驱动的计划&#xff0c;它将为贡献者提供资金&#xff0c;并且可以帮助建立和扩展 Cartesi的生态系统对于那些一直在寻求支持以实现他们想法的开发人员&#xff0c;那些有兴趣帮助建设塑造我们发展生态系统的Cartesi 爱好者们。我们很兴奋的宣布我们推出了Cartes…

【华为OD机试模拟题】用 C++ 实现 - 新学校选址(2023.Q1)

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

Java 的 JDBC 编程

一、数据库编程的必备条件二、Java 的数据库编程 JDBC三、JDBC 工作原理四、JDBC 使用4.1 下载驱动包4.2 打开编辑器&#xff0c;添加依赖4.3 编写连接数据库代码一、数据库编程的必备条件 编程语言&#xff0c;例如 Java、C、C、Python 等.数据库&#xff0c;如 Oracle、MySQ…