力扣-刷题记录

189. 轮转数组

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

力扣https://leetcode.cn/problems/rotate-array/description/

void rotate(int* nums, int numsSize, int k){if(k > numsSize){k %= numsSize;}if(k==0){for(int i=0;i<numsSize;++i){nums[i]=nums[i];  }}int newArr[numsSize+k];int n=0;for(int i=0;i<numsSize;++i){if(i+k<numsSize){newArr[i+k]=nums[i];}else{newArr[n]=nums[i];n++;}}for(int i=0;i<numsSize;++i){nums[i]=newArr[i];}}

虽然这段代码可以解决在k等于0时的问题,但是依然存在新创建数组和使用额外变量n的问题,可能会影响程序的性能和效率。在旋转次数不为0的情况下,仍需要创建新的数组,并且进行两次循环操作,比较耗费时间和空间。

因此,可以考虑使用其他的算法或优化方法来改进代码的实现方式,例如直接在原数组上进行旋转操作,不需要创建新数组,并且可以避免以上问题。

void reverse(int*nums,int begin,int end)
{while(begin<end){int tmp=nums[begin];nums[begin]=nums[end];nums[end]=tmp;begin++;--end;}
}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);
}

上述代码实现了数组元素的旋转操作,采用的是三次反转操作的方法。具体来说,对于给定的数组 nums,将其整个数组进行反转,然后将前 k 个元素进行反转,最后将剩余的元素进行反转,即可得到将数组旋转 k 步后的新数组。


面试题 17.04. 消失的数字

数组nums包含从0n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

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

上述代码同样实现了在给定的数组 nums 中查找缺失的数字,并返回该数字。这个算法采用了数学方法计算序列中所有数字的和,然后减去数组 nums 中所有元素的和,差值就是缺失的数字。

具体来说,由于 nums 数组中缺失一个数字,因此整个序列的长度应该是 numsSize+1。假设整个序列包含从 0 到 numsSize 的所有整数,那么序列元素的总和为 (numsSize+1)*numsSize/2。因此,只需要遍历数组 nums,将 nums[i] 的值累加起来,然后用总和减去这个累加和,最终得到的就是缺失的数字。

int Num(int a)
{if (a <= 0){return 0;}else{return a + Num(a - 1);}
}int missingNumber(int* nums, int numsSize) {int b = Num(numsSize);int c = 0;for (int i = 0; i < numsSize; i++){c =c + nums[i];}int d = b - c;return d;
}

上述代码同样实现了在给定的数组 nums 中查找缺失的数字,并返回该数字。与上一个算法不同的是,这个算法采用递归函数 Num 求出整数从 1 到 numsSize 的所有和 b,然后将数组 nums 中所有元素的值累加起来得到 c,最后用 b 减去 c 得到缺失的数字。

具体来说,递归函数 Num 的实现与第一段代码片段相同,但由于它的时间复杂度为 O(n),因此可能会在计算较大的 numsSize 时导致栈溢出或超时等问题。因此,这种算法的使用范围受到一定限制,仅适用于 numsSize 较小的情况。

总的时间复杂度为 O(n),空间复杂度为 O(1)。需要注意的是,在递归函数中调用自身时,每次调用都会创建新的函数栈帧,因此递归调用会占用一定的内存空间,可能会导致栈溢出等问题。


 3. 整数反转

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

int reverse(int x){int rev=0;while(x!=0){if(rev<INT_MIN/10||rev>INT_MAX/10){return 0;}int turn=x%10;x/=10;rev=rev*10+turn;}return rev;
}

该函数的目标是对给定的整数 x 进行反转,并将反转后的结果作为函数的返回值。在进行反转操作时,我们需要依次取出整数的每一位数字,然后将它们按照相反的顺序组成一个新的整数。例如,对于整数 123456,其反转结果应该为 654321。

具体来说,该函数的实现主要包含以下几个步骤:

初始化反转结果 rev 为 0,准备开始反转操作

int rev = 0;

进入一个 while 循环,循环条件为整数 x 不为 0。在每一次循环中,我们需要取出当前整数的最后一位数字,并将其追加到反转结果 rev 的末尾。

while (x != 0) {int turn = x % 10;          // 取出最后一位数字x /= 10;                    // 去掉最后一位数字rev = rev * 10 + turn;      // 将最后一位数字添加到反转结果 rev 的末尾
}

在更新反转结果 rev 前,需要判断当前的值是否超出了 int 类型的取值范围。如果超出,则直接返回 0,表示无法得到正确的反转结果。

if (rev < INT_MIN / 10 || rev > INT_MAX / 10) {return 0;
}

这里的 INT_MIN 和 INT_MAX 分别表示 int 类型的最小值和最大值。如果反转结果 rev 除以 10 的结果小于 INT_MIN 或大于 INT_MAX,则说明反转结果已经超出了 int 类型的取值范围,无法得到正确的结果。

需要注意的是,在进行整数反转时,由于整数反转涉及数值溢出问题,因此需要特判反转结果的取值范围,以确保程序能够处理所有可能的情况。

循环结束后,返回反转结果 rev。

return rev;

如果输入整数为负数,则在反转前需要先去掉符号位,并在最后将反转结果添加上负号以得到正确的结果。

这一步可以通过在循环开始前增加以下代码实现:

bool negative = false;     // 标记整数是否为负数
if (x < 0) {negative = true;x = -x;                // 去掉符号位
}

在返回结果时,我们需要根据输入整数的符号,判断是否需要将反转结果添加上负号:

if (negative) {return -rev;
} else {return rev;
}

以上就是该函数的详细解释。总体来说,该函数的实现还是比较简单的,主要难点在于如何处理数字的反转和数值溢出问题。


 

 

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

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

相关文章

出海周报|Temu在美状告shein、ChatGPT安卓版上线、小红书回应闪退

工程机械产业“出海”成绩喜人&#xff0c;山东相关企业全国最多Temu在美状告shein&#xff0c;跨境电商战事升级TikTok将在美国推出电子商务计划&#xff0c;售卖中国商品高德即将上线国际图服务&#xff0c;初期即可覆盖全球超200个国家和地区ChatGPT安卓版正式上线&#xff…

方法试用:基于强化学习提高EEG分类准确率的特征选择方法(完整代码)

2023/4/19 -4/21 脑机接口学习内容一览&#xff1a; 这一篇文章主要建立在前文脑机接口随机森林判断睡眠类型与EEG前沿方法探索的基础上&#xff0c;尝试运用强化学习的方法来提高识别睡眠阶段的准确率&#xff0c;对前段时间强化学习的学习成果做一个总结。 一、强化学习类详解…

最简单容易的四格漫画制作软件 Comic Strip Factory for Mac

Comic Strip Factory for Mac是一款漫画制作软件&#xff0c;小编亲测推荐。 Comic Strip Factory 发布了最新版本1.0.137&#xff0c;专为喜欢漫画的用户准备的。无需你会绘画就可以在Mac上制作精美的漫画&#xff0c;常见的卡通四格漫画都可以用它制作。 Comic Strip Fact…

怎么用手机制作一个四格漫画(flutter)

一&#xff0c;背景 四格漫画&#xff0c;是以四个画面分格来完成一个小故事或一个创意点子的表现形式 &#xff0c;分为开头&#xff0c;发展&#xff0c;高潮&#xff0c;结尾 。那怎么用手机制作一个四格漫画呢&#xff1f;就像下图这样。 二&#xff0c;思考过程 漫画么&…

GPT-5: 超越人类语言的模型,你还不了解一下?

目录 一、GPT-5时代引领者 二、技术特性 1&#xff0c;音频和视频处理 — 更强大的多模态处理能力 2&#xff0c;GPT-5颠覆影视制作&#xff1a;重写媒体消费时代 3&#xff0c;为机器人提供智慧大脑 4&#xff0c;更强的垂直行业应用 三、回顾一下GPT5被紧急叫停&…

【论文阅读】Computational Personality: A Survey 计算性格学综述

文章目录 摘要1. 引言2. 计算性格学研究框架2.1 性格学理论基础2.1.1 性格分类模型2.1.2 性格计算&#xff08;测量&#xff09;方法 2.2 计算性格学研究框架 3. 计算性格学研究3.1 性格预测3.1.1 基于大五模型的性格预测3.1.2 基于MBTI性格量表的性格预测3.1.3 小结 3.2 抑郁检…

安装oracle时,口令管理忘记解锁scott!

首先&#xff0c;别急&#xff0c;昨天我也是百度弄了很久才弄好&#xff0c;所以今天整理一下&#xff0c;把昨天的小小成果展示出来。 步骤&#xff1a;1.进入黑屏&#xff0c;输入sqlpus&#xff1b; 2.输入用户名&#xff1a;sys&#xff1b; 输入口令&#xff1a;sys(这个…

Primavera P6用户密码锁定及管理员忘记密码处理

经常有一些同行问到&#xff0c;下面是P6 两个相对极端的问题怎么处理 A, 管理员用户被锁定&#xff08;密码还记得&#xff09; B, 管理员忘记密码 处理这类问题一般在需要在数据库层级操作&#xff0c;当然建议信息部&#xff08;或DB&#xff09;如此操作&#xff0c;毕竟不…

oracle11g忘记管理员密码

oracle的sys和system密码是我们经常忘记的&#xff0c;忘记之后我们可以通过sqlplus来修改重置。 首先打开sqlplus&#xff1a;在运行处可直接输入打开 进入窗口后&#xff0c;首先输入 sqlplus/as sysdba 口令不要输入&#xff0c;直接回车 等数据库连接上之后执行sql语…

Oracle用户密码失效解决办法

错误信息 Oracle用户密码失效后&#xff0c;通常会报如下的错误&#xff1a; java.sql.SQLException: ORA-28001: the password has expired ORA-28001: the password has expired 查看密码有效期 这时候我们需要用sysdba登陆&#xff0c;登录后执行一下语句&#xff1a; …

Oracle System密码忘记 密码修改、删除账号锁定lock

运行cmd命令行 录入 sqlplus /nolog 无用户名登录 conn /as sysdba 连接到数据本地数据alter user system identified by password; 修改System 密码 为password或者打开sqlplus软件: 窗口用户名录入:/nolog D:\oracle\ora92\bin>sqlplus /nolog SQL*Plus: Release 9…

Oracle11g密码忘记

生活中&#xff0c;容易忘记Oracle数据库system用户的密码&#xff0c;怎么办呢&#xff0c;小生带你一步步重新登上Oracle &#xff0c;及时你密码忘记了。 1、打开cmd窗口&#xff0c;输入 sqlplus / as sysdba 2、运行cmd &#xff0c;输入 alter user 用户名 account un…

oracle忘记system密码,锁定

1.按住WindowsR&#xff0c;弹出运行框&#xff0c;输入sqlplus 2.输入sqlplus/as sysdba,回车 3.输入语句:alter user system identified by system; ---- 即可修改密码为system 4.输入语句:alter user system account unlock; ---- 即可解锁用户system

Oracle忘记密码以及账户被锁的解决办法

o(╥﹏╥)o昨天安装Oracle和PLSQL弄了一天&#xff0c;好不容易PLSQL可以连接Oracle也可以登录了&#xff0c;但是今天一直提示这个错误&#xff1a; &#xff08;这是在SQL Plus里面的错误提示&#xff0c;PLSQL里也是&#xff09; 我第一反应是密码输错了&#xff0c;然后又…

基于PHP的客户分销商管理系统

基于PHP的客户分销商管理系统 一 系统介绍 客户分销商管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;角色分为分销商和管理员&#xff0c;分销商登录可以查看个人信息和客户信息。管理员登录对客户&#xff0c;分销商及业绩进行管理。 技术栈 phpmysqlbootstrap…

通用分销渠道和通用产品组的解析

SAP为了结构化数据&#xff0c;通过销售范围&#xff08;销售组织&#xff0c;销售渠道&#xff0c;产品组&#xff09;来建立销售订单&#xff0c;销售范围是销售组织&#xff0c;销售渠道和产品组集合&#xff0c;需要大量维护销售视图。 在实际中&#xff0c;有些客户可能通…

微信三级分销系统开发说明

代码段&#xff1a; 1)贴图&#xff1a;<img src"图片地址"> 2)加入连接&#xff1a;<a href"所要连接的相关地址">写上你想写的字</a> 1)贴图&#xff1a;<img src"图片地址"> 2)加入连接&#xff1a;<a href"…

单商户商城系统功能拆解38—分销应用—分销订单

c 下面以likeshop单商户高级版 商城系统为例进行功能拆解&#xff0c;likeshop单商户高级版商城系统可以实现快速部署&#xff0c;文档齐全&#xff0c;代码全开源&#xff0c;无加密&#xff0c;极易二次开发&#xff0c;助力企业以极低的成本上线电商业务。并且likeshop以其…

代理商分销订货系统(电脑、H5、小程序、APP)多端全套源码

一、系统特色 二、系统环境 1、开发环境 系统使用VS2010SQL Server2008开发完成&#xff0c;开发技术使用.NET MVC3技术。手机端采用HBuilder X开发工具&#xff0c;技术栈为VUEuniapp。 2、安装布署 系统&#xff1a;WINDOWS2003或以上版本 数据库&#xff1a;SQL Server200…

TPshop分销功能的使用与表设计

首先来段科普,摘自百度百科: 在西方经济学中,分销 的含义是建立销售渠道的意思,根据著名的营销大师菲利普科特勒的定义,分销渠道(Distribution Channel)又或者叫营销渠道(Marketing Channel),是指某种商品(Commodity)或服务(Service)从生产者(Producer)向消费者(Consumer…