object-C 解答算法:合并两个有序数组(leetCode-88)

合并两个有序数组(leetCode-88)

题目如下图:(也可以到leetCode上看完整题目,题号88)

首先搞懂,什么叫“非递减顺序

非递减顺序,是指一个序列中的元素从前往后(或从左到右)保持不减少或相等。 这意味着序列中的元素可以保持相同的值,但不会突然减小。例如,序列1, 2, 3, 3, 4, 5就是非递减的,因为每个元素都大于或等于前一个元素。这与递增顺序不同,递增顺序要求每个元素都严格大于前一个元素。在编程和算法中,非递减顺序有时用于合并或处理数组,确保操作后的数组仍然保持这种顺序.

解题方法一:

明白了非递减顺序之后,第一想法其实就是合并数组后,将数组里的整数进行排序就行;

不过这里的合并函数是有说法的,因为题干的“注意”说了,nums1 的初始长度为m+n,m个才是需要合并的元素,所以合并的时候,我们不需要管 nums1 数组里 index=m之后的元素. 同样的,我们也不需要管nums2数组里 index=n之后的元素.所以合并的逻辑应该为;

即: (⚠️:我这里稍微改了示例1中的数字,因为示例1中的m和n 都为3, 会容易让人误解,实际上只要nums的长度m+n,那么n随意等于多少,可以是1,2,3,4,5……)

    int m = 3;int n = 2;NSMutableArray * array1 = [[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"0",@"0", nil];NSMutableArray * array2 = [[NSMutableArray alloc]initWithObjects:@"2",@"5",@"9",@"6", nil];for (int i = 0; i < n; i ++){array1[m+i] = array2[i];}//接下来对array1进行排序,有冒泡排序,选择排序,插入排序等等,可以参考我主页的排序介绍

排序的方法看我的其他文章:

冒泡排序:CSDN

选择排序:CSDN

解题方法二:

直接比较两个数组的每个元素的大小,把最小的放在前面,依次排列 添加到一个新的数组tempArray;如果nums1里 已经添加了m个元素,则说明array1里的其他元素不可以再添加,则后面添加的都是nums2的元素,同理可得,如果nums2已经添加了n个元素,则后面添加的都是nums1的元素.

最后得到的tempArray即是合并后的“非递减顺序”排列,但是题干要求最终的结果要体现在nums1.所以再把tempArray 的元素赋值给nums1元素:

代码如下:

- (void)twoArray1:(NSMutableArray *)array1 Array2:(NSMutableArray *)array2 M:(int)m N:(int)n
{NSMutableArray * tempArray = [[NSMutableArray alloc]init];int k = n+m;for (int index = 0 ,arrayIndex1 = 0, arrayIndex2 = 0; index < k; index++) {if (arrayIndex1 >= m) //array1数组已经取完了,剩下的完全取array2数组即可{tempArray[index] = array2[arrayIndex2 ++];}else if (arrayIndex2 >= n){ //array2数组已经取完了,剩下的完全取array1数组即可tempArray[index] = array1[arrayIndex1 ++];}else if ([array1[arrayIndex1] intValue] < [array2[arrayIndex2] intValue]){//array1数组的元素值小于array2,则取array1数组的值tempArray[index] = array1[arrayIndex1 ++];}else{ //array2数组的元素值小于array2,则取array1数组的值tempArray[index] = array2[arrayIndex2 ++];}}//最后把tempArray的元素赋值到array1上for (int i = 0; i < k; i ++){array1[i] = tempArray[i];}}

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

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

相关文章

外包干了1个月,技术明显退步。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…

Rust 使用 panic! 还是不用 panic!

使用 panic! 还是不用 panic! 那么&#xff0c;该如何决定何时应该 panic! 以及何时应该返回 Result 呢&#xff1f;如果代码 panic&#xff0c;就没有恢复的可能。你可以选择对任何错误场景都调用 panic!&#xff0c;不管是否有可能恢复&#xff0c;不过这样就是你代替调用者…

智能合约和分布式应用管理系统:技术革新与未来展望

引言 随着区块链技术的不断发展&#xff0c;智能合约和分布式应用&#xff08;DApps&#xff09;逐渐成为数字经济中的重要组成部分。智能合约是一种自执行的协议&#xff0c;能够在预设条件满足时自动执行代码&#xff0c;而无需人工干预或中介机构。这种自动化和信任机制极大…

DP V2.1a标准学习(二)

三、线材&连接器要求 1.线材分类 线材按照支持速率的不同,划分为不同规格,具体如下: DP和USB线材混用矩阵,也就是不同规格的线材对应的支持传输速率和传输类型,如下: 2.线材和连接器组件分类 线材+连接器组件分类与DP V1.4类似,不过型号更多了,如下: 也支持2种…

Vue3 使用 Vue Router 时,prams 传参失效和报错问题

Discarded invalid param(s) “id“, “name“, “age“ when navigating 我尝试使用 prams 传递数据 <script setup> import { useRouter } from vue-routerconst router useRouter() const params { id: 1, name: ly, phone: 13246566476, age: 23 } const toDetail…

基于conda包的环境创建、激活、管理与删除

Anaconda是一个免费、易于安装的包管理器、环境管理器和 Python 发行版&#xff0c;支持平台包括Windows、macOS 和 Linux。下载安装地址&#xff1a;Download Anaconda Distribution | Anaconda 很多不同的项目可能需要使用不同的环境。例如某个项目需要使用pytorch1.6&#x…

从 Icelake 到 Iceberg Rust

本文作者丁皓是Databend 研发工程师&#xff0c;也是 ASF Member&#xff0c; Apache OpenDAL PMC Chair &#xff0c;主要研究领域包括存储、自动化与开源。 太长不看 Icelake 已经停止更新&#xff0c;请改用 iceberg-rust。 Iceberg-rust 是一个由社区驱动的项目&#xff0…

kotlin数据类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 Kotlin基本数值类型 基本数据类型包括 Byte、Short、Int、Long、Float、Double 整数类型 类型位宽最小值最大…

内存函数(C语言)

内存函数 以下函数的头文件&#xff1a;string.h 针对内存块进行处理的函数 memcpy 函数原型&#xff1a; void* memcpy(void* destination, const void* source, size_t num);目标空间地址 源空间地址num&#xff0c;被拷贝的字节个数 返回目标空间的起始地…

在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 里如何实现数据的实时监控和性能瓶颈的快速定位一、数据实时监控的重要性二、PostgreSQ…

【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言入门 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀分支与循环语句 &#x1f4d2;1.…

聚类分析方法(三)

目录 五、聚类的质量评价&#xff08;一&#xff09;簇的数目估计&#xff08;二&#xff09;外部质量评价&#xff08;三&#xff09;内部质量评价 六、离群点挖掘&#xff08;一&#xff09;相关问题概述&#xff08;二&#xff09;基于距离的方法&#xff08;三&#xff09;…

element-plus 按需导入问题 404等问题

场景 新开一个项目&#xff0c;需要用element-plus这个ui库&#xff0c;使用按需引入。 这是我项目的一些版本号 "element-plus": "^2.7.6","vue": "^3.2.13","vue-router": "^4.0.3",过程&#xff08;看解决方法…

Unity发布webgl之后修改StreamingAssets 内的配置文件读取到的还是之前的配置文件的解决方案

问题描述 unity发布webgl之后&#xff0c;修改在StreamingAssets 中的配置信息&#xff0c;修改之后读取的还是之前的配置信息 读取配置文件的代码IEnumerator IE_WebGL_LoadWebSocketServerCopnfig(){var uri new System.Uri(Path.Combine(Application.streamingAssetsPath…

种田游戏扎堆,但玩家还有钱建设家园吗?

2024年暑期档&#xff0c;模拟经营游戏成为细分领域变化最为显著的一环。 6月26日泡泡玛特的《梦想家园》、7月10日《波西亚时光》手游版上线、还有心动跳跃整整研发了10年的《心动小镇》也将于7月17日上线。 事实上&#xff0c;从数量上看&#xff0c;模拟经营游戏并非小众品…

springboot 程序运行一段时间后收不到redis订阅的消息

springboot 程序运行一段时间后收不到redis订阅的消息 问题描述 程序启动后redis.user.two主题正常是可以收到消息的&#xff0c;发一条收一条&#xff0c;但是隔一段时间后&#xff1b;就收不到消息了&#xff1b; 此时如果你手动调用发送另外一个消息订阅redis.user.two2&…

代码随想录第50天|单调栈

739. 每日温度 参考 思路1: 暴力解法 思路2: 单调栈 使用场合: 寻找任一个元素的右边或者左边第一个比自己大或者小的元素位置, 存放的是遍历过的元素 记忆: 单调栈是对遍历过的元素做记录, 一般是对栈顶的元素 nums[mystack.top()] 做赋值操作的 如果想找到右边的元素大于左…

电脑文件误删除如何恢复?Top12电脑数据恢复软件汇总合集!(图文详解)

电脑文件误删除如何恢复&#xff1f;在日常使用电脑过程中&#xff0c;我们经常会遇到意外删除文件的情况。可能是因为按错了按键、误操作了鼠标&#xff0c;或者意外格式化了存储设备。这些情况都可能导致重要的文件不小心被删除。但是不用担心&#xff0c;有许多专业的数据恢…

Jeecgboot vue3的选择部门组件JSelectDept如何实现只查询本级以及子级的部门

jeecgboot vue3的文档&#xff1a;地址 JSelectDept组件实现了弹窗然后选择部门返回的功能&#xff0c;但部门是所有数据&#xff0c;不符合需求&#xff0c;所以在原有代码上稍微改动了一下 组件属性值如下&#xff1a; 当serverTreeDatafalse的时候&#xff0c;从后端查询…

【Git的基本操作】版本回退 | 撤销修改的三种情况 | 删除文件

目录 5.版本回退 5.1选项hard&后悔药 5.2后悔药&commit id 5.3版本回退的原理 6.撤销修改 6.1情况一 6.2情况二 6.3情况三 ​7.删除文件 Git重要能力之一马&#xff0c;版本回退功能。Git是版本控制系统&#xff0c;能够管理文件历史版本。本篇以ReadMe文件为…