OJ1——轮转数组,消失的数字

题目1——轮转数组

题目来源. - 力扣(LeetCode)

轮转(或称为旋转)数组是一种常见的算法问题,通常指的是将数组中的元素向右或向左移动一定位置,使得数组的元素重新排列。

以下是一个简单的思路,用于解决将数组向右轮转k个位置的问题(其中k小于或等于数组长度):

思路一:三次翻转法

  1. 翻转整个数组:首先,将整个数组翻转。
  2. 翻转前k个元素:然后,翻转数组的前k个元素。
  3. 翻转剩余元素:最后,翻转数组中从第k个元素到末尾的部分。

通过这三次翻转,你可以得到向右轮转k个位置的数组。

 

  

// 翻转数组从start到end的部分  
void reverse(int* nums, int start, int end) {  
    while (start < end) {  
        int temp = nums[start];  
        nums[start] = nums[end];  
        nums[end] = temp;  
        start++;  
        end--;  
    }  
}  
  
// 原地向右轮转数组k个位置  
void rotate(int* nums, int numsSize, int k) {  
    k %= numsSize; // 确保k不超过数组长度  
    reverse(nums, 0, numsSize - 1); // 翻转整个数组  
    reverse(nums, 0, k - 1); // 翻转前k个元素  
    reverse(nums, k, numsSize - 1); // 翻转剩余元素  
}  
  

思路二:额外空间法

以下是额外空间法的步骤:

  1. 创建新数组:首先,根据原数组的大小,创建一个新的数组。这个新数组将用于存储轮转后的结果。

  2. 计算新位置遍历原数组中的每个元素,根据轮转规则计算出该元素在新数组中的位置。对于向右轮转k个位置的情况,元素nums[i]在新数组中的位置将是(i + k) % numsSize,其中numsSize是原数组的大小。

  3. 复制元素:将原数组中的每个元素复制到新数组中计算出的位置上。

  4. (可选)替换原数组:如果题目要求原地修改数组,则可以在复制完所有元素后,将新数组中的元素复制回原数组。但如果题目只是要求返回轮转后的数组,那么可以直接返回新数组。

这种方法使用了额外的空间,但代码可能更直观和易于理解。

// 使用额外空间轮转数组  
void rotate(int* nums, int numsSize, int k) {  
    k %= numsSize; // 确保k不超过数组长度  
    int* rotated = (int*)malloc(numsSize * sizeof(int));
    
    if(roated==NULL)
    {assert(roated);
    perror("malloc failed");
     exit(-1)
    }  
  
    // 将元素放到新数组的正确位置  
    for (int i = 0; i < numsSize; i++) {  
        rotated[(i + k) % numsSize] = nums[i];  
    }  
  
    // 将新数组的元素复制回原数组  
    for (int i = 0; i < numsSize; i++) {  
        nums[i] = rotated[i];  
    }  
  
    // 释放额外空间  
    free(rotated);  
}  
  

题目2——消失的数字

题目来源:. - 力扣(LeetCode)

思路——异或 

异或运算有一个重要的性质:对于任何数x,都有x^x = 0x^0 = x

我们可以先对从0到n的所有整数进行异或操作,得到一个结果xor_total

然后,遍历给定的数组,对数组中的每个数字进行异或操作,将结果与xor_total进行异或。

由于异或运算的性质,所有在数组中出现两次的数字都会相互抵消,最后剩下的就是缺失的那个数字。

int missingNumber(int* nums, int numsSize) {  
    int xor_total = 0; // 用于存储从0到n的异或结果  
    for (int i = 0; i <= numsSize; i++) { // 遍历从0到n的所有整数  
        xor_total ^= i; // 对每个整数进行异或  
    }  
  
    for (int i = 0; i < numsSize; i++) { // 遍历给定的数组  
        xor_total ^= nums[i]; // 对数组中的每个数字进行异或  
    }  
  
    return xor_total; // 返回异或的结果,即缺失的数字  
}  

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

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

相关文章

基于ssm+vue+Mysql的药源购物网站

开发语言&#xff1a;Java框架&#xff1a;ssmJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.…

【C语言/数据结构】经典链表OJ习题~第二期——链中寻环

&#x1f388;&#x1f388;&#x1f388;欢迎采访小残风的博客主页&#xff1a;残风也想永存-CSDN博客&#x1f388;&#x1f388;&#x1f388; &#x1f388;&#x1f388;&#x1f388;本人码云 链接&#xff1a;残风也想永存 (FSRMWK) - Gitee.com&#x1f388;&#x1f…

Unity LensFlare 入门

概述 在项目的制作过程中&#xff0c;太阳光的使用一定是不可缺少的部分&#xff0c;但是如果想实现真实太阳光眼睛看到的镜头炫光效果&#xff0c;那这部分的内容一定不要错过喔&#xff0c;接下来让我们来学习这部分的内容吧&#xff01; Hale(光环效果) Color&#xff1a;…

Rust Rocket创建第一个hello world的Web程序 Rust Rocket开发常用网址和Rust常用命令

一、Rust Rocket简介 Rust Rocket 是一个用 Rust 语言编写的 Web 应用框架&#xff0c;它结合了 Rust 的安全性和性能优势&#xff0c;以及 Web 开发的便利性。以下是 Rust Rocket 框架的一些优点&#xff1a; 安全性&#xff1a;Rust 是一种注重安全性的编程语言&#xff0c;…

如果通过Glide 设置图片圆角

要给图片设置一个圆角,通常方法是在ImageView 标签外添加一个CardView 标签,然后设置圆角值,但是今天遇到一个问题就是 RecyclerView Item 中这样操作的话会遇到这样的一个报错: Cannot call this method while RecyclerView is computing a layout or scrolling androidx.rec…

API安全

一&#xff0c;什么是API API指的是应用程序编程接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是一组定义了软件组件如何相互交互的规范。通过API&#xff0c;不同的软件可以相互通信和交换数据&#xff0c;实现不同软件之间的集成和互操作。 …

详细分析Java中的脱敏注解(附Demo)

目录 前言1. 基本知识2. 核心逻辑3. Demo4. 模版 前言 对于隐私信息&#xff0c;需要做特殊处理&#xff0c;比如身份证或者手机号等 对于Java的相关知识推荐阅读&#xff1a;java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09; 1. 基本知…

06 - 步骤 add constants

简介 Add Constants 步骤是用于在数据流中添加常量字段的步骤。它允许用户在数据流中插入一个或多个常量字段&#xff0c;并为这些字段指定固定的数值、字符串或其他类型的常量值。 使用 场景 我需要在数据清后&#xff0c;这个JSON 字符串有一个固定的行流数据。 1、拖拽…

基于Springboot的社区医疗服务系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的社区医疗服务系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

6.python网络编程

文章目录 1.生产者消费者-生成器版2.生产者消费者--异步版本3.客户端/服务端-多线程版4.IO多路复用TCPServer模型4.1Select4.2Epoll 5.异步IO多路复用TCPServer模型 1.生产者消费者-生成器版 import time# 消费者 def consumer():cnt yieldwhile True:if cnt < 0:# 暂停、…

LLM优化:开源星火13B显卡及内存占用优化

1. 背景 本qiang~这两天接了一个任务&#xff0c;部署几个开源的模型&#xff0c;并且将本地经过全量微调的模型与开源模型做一个效果对比。 部署的开源模型包括&#xff1a;星火13B&#xff0c;Baichuan2-13B, ChatGLM6B等 其他两个模型基于transformers架构封装&#xff0…

使用Git把写好的项目放到github上

把之前的文章差缺补漏了一下&#xff0c;发现少一个TUserController文件&#xff0c;然后加上了。 以及发现前后端交互时的跨域问题需要处理。 在Controller文件里加入注释 CrossOrigin(origins "*")即可。 不然数据在Vue里显示不出来。 ** 壹 首先先把前端项目 de…

ElasticSearch教程入门到精通——第四部分(基于ELK技术栈elasticsearch 7.x新特性)

ElasticSearch教程入门到精通——第四部分&#xff08;基于ELK技术栈elasticsearch 7.x新特性&#xff09; 1. Elasticsearch进阶1.1 核心概念1.1.1 索引Index1.1.1.1 索引创建原则1.1.1.2 Inverted Index 1.1.2 类型Type1.1.3 文档Document1.1.4 字段Field1.1.5 映射Mapping1.…

AI项目二十一:视频动态手势识别

若该文为原创文章&#xff0c;转载请注明原文出处。 一、简介 人工智能的发展日新月异&#xff0c;也深刻的影响到人机交互领域的发展。手势动作作为一种自然、快捷的交互方式&#xff0c;在智能驾驶、虚拟现实等领域有着广泛的应用。手势识别的任务是&#xff0c;当操作者做出…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习六

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…

设备能源数据采集新篇章

在当今这个信息化、智能化的时代&#xff0c;设备能源数据的采集已经成为企业高效运营、绿色发展的重要基石。而今天&#xff0c;我们要向大家介绍的就是一款颠覆传统、引领未来的设备能源数据采集神器——HiWoo Box网关&#xff01; 一、HiWoo Box网关&#xff1a;一站式解决…

virtualbox kafka nat + host-only集群 + windows 外网 多网卡

virtualbox kafka nat + host-only集群 + windows 映射访问 kafka集群搭建背景kafka集群搭建 背景 使用virtualbox搭建kafka集群,涉及到不同网络策略的取舍 首先 桥接 网络虽说 啥都可以,但是涉及到过多ip的时候,而且还不能保证使用的ip不被占用,所以个人选择kafka虚拟机…

2024.5.5 机器学习周报

引言 Abstract 文献阅读 1、题目 SuperGlue: Learning Feature Matching with Graph Neural Networks 2、引言 本文介绍了SuperGlue&#xff0c;这是一种神经网络&#xff0c;它通过联合寻找对应关系并拒绝不匹配的点来匹配两组局部特征。通过求解一个可微的最优运输问题…

【Mac】Photoshop 2024 for mac最新安装教程

软件介绍 Photoshop 2024是Adobe公司推出的一款图像处理软件&#xff0c;它支持Windows和Mac OS系统。Adobe Photoshop是业界领先的图像编辑和处理软件之一&#xff0c;广泛用于设计、摄影、数字绘画等领域。 Photoshop 2024的功能包括&#xff1a; 1.图像编辑&#xff1a;提…

如何提高商务认知与情商口才(3篇)

如何提高商务认知与情商口才&#xff08;3篇&#xff09; **篇&#xff1a;提高商务认知 商务认知的提升是一个系统工程&#xff0c;需要我们不断地积累知识、理解市场和关注行业动态。以下是一些具体的方法&#xff1a; 持续学习&#xff1a;通过阅读商业书籍、参加行业研讨…
最新文章