轮转数组 与 消失的数字

轮转数组

思路一

创建一个新内存空间,将需轮转的数依次放入,之后在把其它数放入


代码:

void rotate(int* nums, int numsSize, int k) {k = k % numsSize;// 确定有效的旋转次数if(k == 0)return;int* newnums = (int*)malloc(sizeof(int) * numsSize);//临时数组//复制需要旋转的元素int i;for(i = 0;i < k;i++){newnums[i] = nums[numsSize - k + i];}//复制不需要旋转的元素for(i = 0;i<numsSize - k;i++){newnums[k + i] = nums[i]; }//拷贝至原数组memmove(nums,newnums,sizeof(int) * numsSize);
}

思路二

三段逆置,这个方法比较不容易想到具体为:

第一段 先把需要旋转的元素逆置

第二段 再把不需要旋转的元素逆置

第三段 最后再把整体逆置

这样子就可以很好的完成题目的需求了

 代码:

void nizhi(int *arr,int numssize){int left = 0;int right = numssize - 1;while(left < right){int temp = arr[left];arr[left] = arr[right];arr[right] = temp;left++;right--;}
}void rotate(int* nums, int numsSize, int k) {k = k % numsSize;// 确定有效的旋转次数if(k == 0)return;//第一端 逆置nizhi(nums + (numsSize - k),k);//第二段 逆置nizhi(nums,numsSize - k);//第三段逆置nizhi(nums,numsSize);}

消失的数字 

 思路一

将 0 - n 的数全部加起来,再把数数组中的元素全部减去,剩下的那个数字就是消失的数字

例如:

 

 代码:

int missingNumber(int* nums, int numsSize){//等差数列算出总和int ret = numsSize*(1+numsSize)/2;int count = 0;//把数组中的数全部加起来for(int i = 0;i<numsSize;i++){count += nums[i];}//拿总数减去数组中的数,得到的就是消失的数字return ret - count;
}

 思路二:

使用位的运算,将 0 ~ n 的数,全部与数组内的数进行 (按位异或) ^ 运算 留下来的数就是缺失的

原理:

任何数都等于 ^ 0  = 自己   例如 :001010 ^ 000000 = 001010

任何数 ^ 任何数 = 0   例如 :001010 ^ 001010 = 000000

知道了这个结论我们再将它带入实际例子中

我们发现两两成对的都被消除了,剩下的那个就是缺少的数字了

注意:0 ^ 0 ^1 ^ 1 ^ 2 ^ 2 ^ 3 ^ 3 ^ 5 ^ 5 ^ 4 它们打乱顺序对最终结果也不影响

像 1 + 1+ 2 = 4   ||   2 + 1 + 1 = 4一样没有区别

代码:

int missingNumber(int* nums, int numsSize){int find = 0;for(int i = 0;i < numsSize;i++) //先把数组的数字 ^ 完{find ^= nums[i];}for(int i = 0;i <= numsSize;i++)//再把 0~ numsSize 的数字 ^ 完{find ^= i;}return find;
}

或 

int missingNumber(int* nums, int numsSize){int find = 0;for(int i = 0;i < numsSize;i++)//通过i访问素组所有元素{find ^= nums[i] ^ (i + 1); //i + 1 作为 1 ~ numsSize 去^ ,因为下标是从0开始的}return find;
}

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

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

相关文章

HarmonyOS应用开发者高级认证 试题+答案

判断题 云函数打包完成后&#xff0c;需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用&#xff08;错误&#xff09; 每一个自定义组件都有自己的生命周期&#xff08;正确&#xff09; 基于端云一体化开发&#xff0c;开发者需要精通前端、后端不同的开发语言…

h2 数据库Statement was canceled or the session timed out 解决办法

背景 某项目因需要存储的数据较少&#xff0c;选择了h2 数据库。数据库的某张表的数据需要全部加载到内存中使用。 最近&#xff0c;某个项目使用该应用时需求比较特殊&#xff0c;使得这张表的数据量增加到了一万条。此时&#xff0c;查询全量数据的 SQL 发生了异常&#xf…

递归求fabonacci数列 pta

斐波那契数列&#xff08;Fibonacci sequence&#xff09;是一个经典的数列&#xff0c;它由以下递归关系定义&#xff1a; [ F(n) F(n-1) F(n-2) ] 其中&#xff0c;( F(0) 0 ) 和 ( F(1) 1 )。 在编程中&#xff0c;递归是一种实现斐波那契数列的直观方法。以下是使用递…

git之tag操作

查看本地有哪些 tags # git tag -l v0.0.3 v0.0.5 v0.0.6查看远程有哪些 tags # git ls-remote --tags From https://github.com/eyjian/gomooon.git 1fe7f5ecf369cba34f4328285ce1ec72d62c091e refs/tags/v0.0.3 9371db55046109d7fc9a9f75625d5ec31c326ad1 re…

[muduo网络库]——muduo库Acceptor类(剖析muduo网络库核心部分、设计思想)

接着之前我们剖析的muduo库三大核心组件Channel类&#xff0c;Poller/EpollPoller类&#xff0c;EventLoop类&#xff0c;我们接下来继续看muduo库中的其他类&#xff0c;这一篇&#xff0c;我们先来介绍Acceptor类。 Acceptor类 主要功能 Acceptor类用于创建套接字&#xf…

企业OA办公系统开发笔记:1、搭建后端环境

文章目录 企业办公系统&#xff1a;搭建环境一、项目介绍1、介绍2、技术栈3、项目模块4、数据库 二、搭建环境1、搭建后端1.1、搭建父工程clfwzx-oa-parent1.2、搭建工具类父模块common1.3、搭建工具类common的子模块1.4、搭建实体类模块model和项目模块service-oa 2、配置依赖…

亲测!史上最全数据库基础?!

为什么要学习数据库 以前在程序中存储数据是一个变量&#xff0c;对象&#xff1b;数据都存储在内存中&#xff0c;程序运行结束后就销毁。 后来学习IO之后&#xff0c;将数据存储在文件中&#xff0c;做到持久存储&#xff0c;但是使用不方便。 学习专业的数据存储软件——…

基于POSIX的信号量模拟DAG上的并行计算的同步问题

本代码主题借鉴nju的jyy老师的代码 自己增加了随机生成DAG(有向无环图)(不保证连通)数据进行测试 运行打印结果即为并行计算DAG的拓扑序 #include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <iostream> #include <vector&g…

2024最新最全【NMAP】零基础入门到精通

一、Nmap介绍 Nmap(Network Mapper&#xff0c;网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络&#xff0c;包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹识别、WAF识别及常见安全漏洞。它的图形化界面是Zenmap&#xff…

[AIGC] redis 持久化相关的几道面试题

文章目录 1. 什么是Redis持久化&#xff1f;2. Redis 的持久化机制是什么&#xff1f;各自的优缺点&#xff1f;2.1 RDB&#xff08;Redis DataBase&#xff09;&#xff0c;快照2.2 AOF&#xff08;Append Only File&#xff09;&#xff0c;日志 3. 优缺点是什么&#xff1f;…

Vue3的setup

Vue3的setup setup选项是一个接收props和context的函数是一个新的组件选项&#xff0c;作为Composition-API的入口点&#xff0c;只会被执行一次&#xff0c;用于建立数据与逻辑的连接。 注意点 在执行setup函数时&#xff0c;还没执行created生命周期方法&#xff0c;因此在s…

单核CPU调度

CPU MLFQ 调度 MLFQ即多级反馈队列调度。在给定时间片中&#xff0c;任务存在不同优先队列之中等待被执行&#xff0c;MLFQ根据优先级去决定哪个任务在该时间片执行 Round Robin Round Robin即RR&#xff0c;是基于时间片的轮询调度算法。给每个任务分配一个时间片&#xff…

pixhawk无人机飞控解锁

飞控解锁 GitBook 左手油门的遥控解锁是油门右下角拨&#xff0c;右手油门是油门最低&#xff0c;方向最右。 飞控如何加锁? 左手油门&#xff1a;油门左下角 右手油门&#xff1a;油门最低&#xff0c;方向最左 飞控解锁成功后&#xff0c;不推油门的情况下&#xff0c;…

基于SSM+Vue的物流管理系统

运行截图 获取方式 Gitee仓库

大众点评全国店铺基础信息采集-学习培训店铺-2024年5月

2024年5月最新采集大众点评全国(内地)-学习培训大类-店铺基础信息&#xff0c;93余万家 学习培训类店铺示例&#xff1a; 店铺id k40VtNBN3bixFJIU 店铺名称 梦想钢琴成人钢琴(珠江新城总部) 十分制效果评分 9.4 十分制服务评分 9.4 十分制环境评分 9.4 人均价格 1233 …

为什么数据库字符编码不一致会导致索引失效

引言 数据库字符编码不一致是数据库管理和优化过程中经常遇到的问题之一&#xff0c;尤其在涉及多语言环境和多应用时更为显著。本文旨在深入探讨字符编码不匹配如何影响SQL查询性能&#xff0c;导致索引失效&#xff0c;以及其背后的原理。 1. 字符编码与索引基础 字符编码…

【TypeScript模块简介以及使用方法】

TypeScript模块简介 TypeScript中的模块&#xff08;Modules&#xff09;是代码的封装体&#xff0c;它们可以包含变量、函数、类和接口等。在TypeScript中&#xff0c;模块可以被其他模块引用和使用&#xff0c;从而实现代码的复用和模块化开发。 TypeScript支持两种模块系统…

LORA学习笔记2——训练集处理

前言 对于ai训练来说&#xff0c;处理训练集是模型训练的重要环节。训练集的质量对最终模型的质量影响巨大。这里以二次元角色为例&#xff0c;记录下训练集处理的流程和一些心得。 素材准备 素材准备有以下几个需要注意的点&#xff1a; 通常训练二次元角色需要30张以上的…

14:HAL---CRC校验

103系列只有一个CRC 前言&#xff1a; CRC&#xff08;Cyclic Redundancy Check&#xff09;&#xff0c;即循环冗余校验&#xff0c;是一种根据网络数据包或电脑文件等数据产生简短固定位数校核码的快速算法&#xff0c;主要用来检测或校核数据传输或者保存后可能出现的错误。…

QX---mini51单片机学习---(8)8*8点阵屏

目录 1LED点阵屏简绍 2 8*8点阵屏电路图74 3 74HC595芯片 4实践编程 1LED点阵屏简绍 2 8*8点阵屏电路图74 怎么点亮&#xff0c;正极给高负极给低 不能同时静态显示&#xff0c;跟数码管动态显示一样&#xff0c;反复横跳&#xff0c;利用视觉效果 3 74HC595芯片 …