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

news2024/9/21 2:31:16

合并两个有序数组(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];
            arrayIndex2 ++;
        }else if (arrayIndex2 >= n){ //array2数组已经取完了,剩下的完全取array1数组即可
            
            tempArray[index] = array1[arrayIndex1];
            arrayIndex1 ++;
            
        }else if ([array1[arrayIndex1] intValue] < [array2[arrayIndex2] intValue]){
            //array1数组的元素值小于array2,则取array1数组的值
            tempArray[index] = array1[arrayIndex1];
            arrayIndex1 ++;
        }else{ //array2数组的元素值小于array1,则取array2数组的值
            tempArray[index] = array2[arrayIndex2];
            arrayIndex2 ++;
        }
    }
    
    //最后把tempArray的元素赋值到array1上
    for (int i = 0; i < k; i ++)
    {
        array1[i] = tempArray[i];
    }
    
}

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

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

相关文章

c++ pc输入法例子

1、微软开源demo Windows-classic-samples/Samples/IME at master jiangdon2007/Windows-classic-samples (github.com) 2、打开SampleIME.sln 编译【32位或者64位】 3、将SampleIME.dll 和SampleIMESimplifiedQuanPin.txt 放在同一个目录 4、注册 regsvr32 SampleIME.dl…

spring 5.3.x 、6.1.x、6.0.x 源码本地编译运行

参考大佬文章&#xff0c;完美完成本地idea spring源码编译和demo测试 参考链接&#xff08;spring5.3.x&#xff09; spring5.3.x源码阅读环境搭建 下面是spring6.0.x参考 spring6.0.x jdk调成17 idea 2022.2.4版本本地编译spring源码项目 spring6.0.x 分支 gradle-8…

小程序-4(自定义组件:数据、属性、数据监听器、生命周期函数、插槽、父子通信、behaviors)

目录 1.组件的创建和引用 局部引用组件 全局引用组件 组件和页面的区别 组件样式隔离 ​编辑 组件样式隔离的注意点 修改组件的样式隔离选项 data数据 methods方法 properties属性 data和properties属性的区别 使用setData修改properties的值 2.数据监听器 什么…

stm32入门-----EXTI外部中断(下——实践篇)

目录 前言 一、硬件介绍 1.对射红外线传感器 2.旋转编码器 二、EXTI外部中断C编程 1.开启RCC时钟 2.配置GPIOK口初始化 3.配置AFIO 4.配置EXIT 5.配置NVIC 三、EXIT外部中断项目实操 1.对射红外传感器计数 2.选择编码器计数 前言 本期接着上一期的内容继续学习stm3…

AutoMQ 生态集成 Redpanda Console

通过 Kafka Web UI 更加便利地管理 Kafka/AutoMQ 集群 随着大数据技术的飞速发展&#xff0c;Kafka 作为一种高吞吐量、低延迟的分布式消息系统&#xff0c;已经成为企业实时数据处理的核心组件。然而&#xff0c;Kafka 集群的管理和监控却并非易事。传统的命令行工具和脚本虽…

Java流的概念及API

流的概念 流&#xff08;Stream)的概念代表的是程序中数据的流通&#xff0c;数据流是一串连续不断的数据的集合。在Java程序中&#xff0c;对于数据的输入/输出操作是以流(Stream)的方式进行的。可以把流分为输入流和输出流两种。程序从输入流读取数据&#xff0c;向输出流写入…

Python项目打包与依赖管理指南

在Python开发中&#xff0c;python文件需要在安装有python解释器的计算机的电脑上才能运行&#xff0c;但是在工作时&#xff0c;我们需要给客户介绍演示项目功能时并不一定可以条件安装解释器&#xff0c;而且这样做非常不方便。这时候我们可以打包项目&#xff0c;用于给客户…

《驾驭AI浪潮:伦理挑战与应对策略》

AI发展下的伦理挑战&#xff0c;应当如何应对&#xff1f; 人工智能飞速发展的同时&#xff0c;也逐渐暴露出侵犯数据隐私、制造“信息茧房”等种种伦理风险。随着AI技术在社会各个领域的广泛应用&#xff0c;关于AI伦理和隐私保护问题日趋凸显。尽管国外已出台系列法规来规范…

达梦数据库DM8-索引篇

目录 一、前景二、名词三、语法1、命令方式创建索引1.1 创建索引空间1.2.1 创建普通索引并指定索引数据空间1.2.2 另一种没验证&#xff0c;官方写法1.3 复合索引1.4 唯一索引1.5 位图索引1.6 函数索引 2、创建表时候创建索引3、可视化方式创建索引3.1 打开DM管理工具3.2 找到要…

nginx负载均衡实例

实现效果 浏览器输入地址http://nginx服务器ip(:80)/edu/a.html&#xff0c;实现负债均衡效果&#xff0c;平均分配到 服务器ip:8080和 服务器ip:8081进程中。 准备工作 准备两个tomcat&#xff0c;一个监听在8080端口&#xff0c;一个监听在8081端口。也可以准备多个tomcat。…

如何在电脑上演示手机上APP,远程排查移动端app问题

0序&#xff1a; 对接客户&#xff0c;给领导演示移动端产品&#xff0c;或者远程帮用户排查移动端产品的问题。都需要让别人能够看到自己在操作手机。 会议室可以使用投屏&#xff0c;但需要切换电脑和手机。 排查问题经常都是截图、或者手机上录制视频&#xff0c;十分繁琐…

node-red学习

Node-RED : 起步 1、安装nodejs Node.js — 在任何地方运行 JavaScript 验证 2、更换下载源 // 查看当前下载地址 npm config get registry // 设置淘宝镜像的地址 npm config set registry https://registry.npmmirror.com/ // 查看当前的下载地址 npm config get registry…

抖音矩阵系统源码开发部署流程分享

#短视频矩阵源码 #短视频矩阵 #源码交付 抖音矩阵系统源码开发部署流程如下&#xff1a; 环境配置&#xff1a;首先&#xff0c;需要安装并配置开发环境&#xff0c;包括安装Java JDK、MySQL数据库、Eclipse开发工具等。 数据库设计&#xff1a;根据抖音矩阵系统的需求&…

安全入门day01

一、常用名词 1、前后端 &#xff08;1&#xff09;前端 前端主要负责用户界面的展示和交互。它通常包括HTML、CSS和JavaScript等技术的使用&#xff0c;也可能使用各种前端框架和库&#xff0c;如React、Vue.js、Angular等&#xff0c;来构建更加复杂和动态的用户界面。前端…

Flowable的学习一

今日项目用到了Flowable。简单记录下。 学习中 参考了网上资料&#xff1a; 工作流-Activiti7-基础讲解_activity工作流-CSDN博客 https://juejin.cn/post/7158342433615380517 flowable实战&#xff08;九&#xff09;flowable数据库表中流程实例、活动实例、任务实例三者…

Windows系统如何本地部署Ollama并运行千文qwen大模型详细教程

文章目录 前言1. 运行Ollama2. 安装Open WebUI2.1 在Windows系统安装Docker2.2 使用Docker部署Open WebUI 3. 安装内网穿透工具4. 创建固定公网地址 前言 本文主要介绍如何在Windows系统快速部署Ollama开源大语言模型运行工具&#xff0c;并安装Open WebUI结合cpolar内网穿透软…

Unity动画系统(4)

6.3 动画系统高级1-1_哔哩哔哩_bilibili p333- 声音组件添加 using System.Collections; using System.Collections.Generic; using UnityEngine; public class RobotAnimationController : MonoBehaviour { [Header("平滑过渡时间")] [Range(0,3)] publ…

java文本比较解决方案

参考资料 VBA计算页码和行号https://learn.microsoft.com/zh-cn/office/vba/api/word.wdinformation 概述&#xff1a; 最近在做word文档对比的&#xff0c;总结了几种解决方案&#xff0c;记录一下 在java中&#xff0c;常用的文本对比方案有如下几种&#xff1a; 差异比较…

Git分支合并以及分支部分合并 提交记录合并

Git分支合并,以及分支部分合并,提交记录合并 最近工作中用到git分支合并的场景,记录一下. 分支整体合并,合并所有记录 仅合并分支部分代码

【Django】网上蛋糕商城后台-类目管理

1.类目管理列表实现 当管理员进入后台管理后&#xff0c;点击类目管理&#xff0c;向服务器发出请求 path(admin/type_list/,viewsAdmin.type_list), # 处理商品分类管理列表请求 def type_list(request):# 读取分页页码try:ym request.GET["ym"]except:ym 1# 查…