LeetCode | 88. 合并两个有序数组

go:实现合并两个有序数组算法(附完整源码) 阅读详情

1. 题目

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例请看:合并两个有序数组

2. 解题思路

为什么倒序

nums1 = [4, 5, 6, 0, 0, 0]
m = 3
nums2 = [1, 2, 3]
n = 3

假如使用正序遍历nums1[0] > nums2[0],这个时候需要把nums2[0]数据放到nums1[0]位置,但是nums1[0]当前还保存了有效数据。如果直接交换数据就会变成如下所示

nums1 = [1, 5, 6, 0, 0, 0]
m = 3
nums2 = [4, 2, 3]
n = 3

这个时候会造成nums2变成一个无序数组,后续处理就变的特别麻烦。

如果采用倒序就完全没有这个问题,不会存在保存nums2数据时与nums1原始有效数据冲突问题。

停止条件

这个就比较简单,因为是倒序遍历,所以只两个数组的索引大于等于0就一直循环遍历下去。

判断条件

1.如果nums1和nums2都有数据将比较小的数据放入nums1中记录索引位置,并把效小元素的数组索引-1.
2.如果只有nums1有剩余数据,表示出现如下情况可以直接停止循环。
break

3.只有nums2有剩余数据,就需要将数据拷贝到nums1上。

3. 演示

class Solution(object):
    def merge(self, nums1, m, nums2, n):
        """
        :type nums1: List[int]
        :type m: int
        :type nums2: List[int]
        :type n: int
        :rtype: None Do not return anything, modify nums1 in-place instead.
        """
        nums1_index = m - 1
        nums2_index = n - 1
        real_index = m + n - 1
        while nums1_index >= 0 or nums2_index >= 0:
            if nums1_index >= 0 and nums2_index >= 0:
                if nums1[nums1_index] > nums2[nums2_index]:
                    nums1[real_index] = nums1[nums1_index]
                    nums1_index -= 1
                else:
                    nums1[real_index] = nums2[nums2_index]
                    nums2_index -= 1
            elif nums1_index >= 0:
                break
            else:
                nums1[real_index] = nums2[nums2_index]
                nums2_index -= 1
            real_index -= 1


if __name__ == '__main__':
    nums1 = [1, 2, 3, 0, 0, 0]
    m = 3
    nums2 = [2, 5, 6]
    n = 3

    s = Solution()
    s.merge(nums1, m, nums2, n)
    print(nums1)

4. 参考

Java实现合并两个有序数组 算法的基本思想是创建一个新的数组,然后按照顺序从两个输入数组中选择较小的元素,并将其放入新数组中。通过重复这个过程,直到遍历完所有的元素,我们就得到了一个合并后的有序数组。首先,让我们来解决一个常见的问题:如何将两个有序数组合并成一个有序数组。这个算法的时间复杂度是O(m+n),其中m和n分别是两个输入数组的长度。希望这篇文章能够帮助你理解如何使用Java实现将两个有序数组合并成一个有序数组的算法。当其中一个数组遍历完后,我们将剩余数组中的元素依次放入。,它的长度是两个输入数组的长度之和。 阅读详情

相关推荐

LeetCode 88 - 合并两个有序数组

是非常基础的数组操作题目,考察双指针、逆序操作和空间优化等技巧。这个问题相当经典,对后续的归并排序、多指针问题、双数组相关问题都有指导意义。以下是详细的解法、模板与变体问题讲解。给定你两个有序整数数组nums1和nums2,以及两个非负整数m和n,表示分别代表数组nums1和nums2中的有效元素个数。将nums2中的所有元素合并到nums1中,使数组变为一个有序数组。

互联网架构师笔记 1424

LC 合并两个有序数组 python解答 15% 46%

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

weixin_42375356的博客 2926

【简单】力扣算法题解析LeetCode88:合并两个有序数组

合并两个有序数组的算法题解:使用双指针从后向前填充,避免覆盖元素。核心思路是比较nums1和nums2末尾元素,将较大者放入nums1尾部,处理剩余元素后即可完成合并。时间复杂度O(m+n),空间复杂度O(1)。提供Java实现代码,适用于非递减数组的原地合并。

ylumwd的博客 562

用Java实现两个有序数组合并成一个有序数组

每次比较都是比较的最左边未比较过的元素(通过变量),循环比较,直至其中有一个集合遍历结束,将另一个集合。:新建一个以两个集合长度之和为长度的新数组,从两数组最左边开始比起,把小的放入新集合,并用变量标记后一位置,数组a[]和b[],将它们合并成。

NullpointerExcep的博客 4294

java实现把两个有序数组合并到一个数组的实例

今天小编就为大家分享一篇java实现把两个有序数组合并到一个数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

Simscape Multiboby学习笔记1——跟着官网学Multibody

文章目录一. 引言二. Simscape Multibody自学之路三. 本教程的目录 一. 引言 最近在倒腾Matlab的动力学仿真,起因是看到有人推荐Matlab的multbody模块,一经了解之下简直惊为天人。作为一名Matlab的小粉,看到这么好用的模块简直不要太开心,之前用simulink搭飞行器的仿真模型,虽然能够仿真看到六自由度位移,毕竟不能可视化,还是很不够直观,而且simulink仿真(以及更费力的脚本文件仿真)需要精确建模,模型不精确计算也是天差地别。而Multibody在具备其他动力学

qq_30267617的博客 8241

[力扣LeetCode]88-合并两个有序数组

[力扣LeetCode]88-合并两个有序数组

JoeyTanHDU的博客 595

深入解析SVPWM七段式与五段式调制的电压波形差异及优化策略

本文深入解析了SVPWM七段式与五段式调制在相电压和线电压波形上的核心差异。七段式波形对称、谐波含量低,适合追求静音与性能的场景;五段式开关次数少、损耗低,适用于对效率与散热要求高的应用。文章提供了基于谐波与损耗权衡的优化策略与选型指南。

weixin_29216957的博客 438

力扣简单题系列:合并两个有序数组(LeetCode 88)

这道题通过双指针法,高效地将两个有序数组合并为一个有序数组。对于初学者来说,掌握双指针的思想是解决类似问题的关键。

weixin_53910667的博客 794

Containerd容器运行时的私有仓库镜像推送push和镜像拉取问题解决

向/etc/containerd/config.toml配置添加如下配置,然后重启containerd。向/etc/containerd/config.toml配置添加如下配置,然后重启containerd。通过crictl为k8s拉取镜像如下所示。可以通过ctr命令进行镜像推送。往私有仓库推送镜像如下。

Bulut0907 1万+

小波变换(Wavelet Transform)原理及介绍

小波变换是一种多分辨率时频分析工具,克服了傅里叶变换无法定位时间信息的缺陷。通过可伸缩平移的母小波,它能同时捕捉信号的高频细节(短时特征)和低频轮廓(整体趋势)。其核心原理是利用不同尺度的小波基与信号进行内积运算,生成时频域系数矩阵。小波变换具有动态分辨率特性,高频部分时间精度高,低频部分频率分辨率好。主要应用包括瞬态事件检测、信号降噪、数据压缩(如JPEG2000)和压缩感知(如快速MRI)。

qq_42758052的博客 5482

力扣每日一道系列 --- LeetCode 88. 合并两个有序数组

LeetCode 88. 合并两个有序数组 思路1:暴力求解 思路二:原地合并 如果大家有什么疑问可以在评论区与我讨论,或者直接私信我,感谢大家的阅读哦 ~

深入解析C/C++编程技巧,带你探索高效开发之路 2644

Python邮件自动化实战:基于imaplib和email库的高效邮件管理方案

本文详细介绍了如何使用Python的imaplib和email库实现高效邮件自动化管理。通过实战案例展示自动收取、解析邮件、下载附件等核心功能,帮助开发者快速构建企业级邮件处理系统,大幅提升工作效率。特别适合需要处理大量邮件的金融、数据分析等场景。

weixin_30500105的博客 618

力扣 P88 合并两个有序数组

力扣 P88 合并两个有序数组 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0...

hyj1109421943的博客 340

Weibull Distribution韦布尔分布的深入详述(1)原理和公式

本章介绍韦布尔分布(weibull distribution)和实践之基本公式和推导。 韦伯分布被经常用来对失效性(Failure)或者,反而言之为,可靠性,进行衡量的工具。他的目标就是构建一个失效性分析的模型,或者说构建一个失效性分析的Pattern.【Franklin案,在展示CDF公式的之前,不得不提我们的国内的某些度知识里面的公式,采用的希腊字母完全和国外的不同,然而,很多希腊字母在使用中有特定的意义,本文采用的是通用的表达公式】 F(x)={1−e−(xλ)kx≥00x..............

山云的专栏 8万+

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

jks212454的博客 1091

LeetCode 力扣 88. 合并两个有序数组

题目描述(简单难度) 给两个有序数组,把第二个数组合并到第一个数组中,保持有序。可以注意到第一个数组已经为我们多开辟了第二个数组所需要的空间。 解法一 直接法 简单粗暴,nums1 作为被插入的数组,然后遍历 nums2。用两个指针 i 和 j ,i 指向 nums1 当前判断的数字,j 指向 num2 当前遍历的数字。如果 j 指向的数字小于 i 指向的数字,那么就做插入操作。否则的话后移 i...

wind_liang的博客 973

极智芯 | 解读国产CPU之海光

大家好,我是极智视界,本文分享一下 解读国产CPU之海光。希望我的分享能对你的学习有一点帮助。

极智视界 3317

【leetCode88】合并两个有序数组

leetCode第88题

日出等日落 199

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

88.力扣LeetCode_合并两个有序数组

文章摘要: 该代码实现了合并两个有序数组的功能,其中nums1数组预留了足够空间。算法采用从后向前遍历的方式,通过三个指针分别标记nums1有效元素末尾、nums2末尾和合并位置。核心思想是比较两数组当前元素,将较大值放入nums1末端,依次向前填充。最后处理剩余元素,确保所有数据有序合并。时间复杂度为O(m+n),空间复杂度O(1),是一种高效的原位合并方法。注释详细说明了参数含义和指针移动逻辑。

2401_82472941的博客 264

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

leetcode88. 合并两个有序数组,倒着做

leetcode88. 合并两个有序数组,倒着做

热爱C++和golang的学生 1121

【Java力扣算法】Leetcode 88 合并两个有序数组

题目: 给定两个有序整数数组nums1和nums2,将nums2合并到nums1中,使得num1成为一个有序数组。 说明: 初始化nums1和nums2的元素数量分别为m和n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存nums2中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0], m =...

懂技术的猫 374

力扣(LeetCode) 88. 合并两个有序数组 python3

本来这种题不打算写题解的,因为之前做的题别人都有一堆优秀的题解,自己的又臭又长还占时间内存,写完这道题后发现比目前这道题靠前的python3题解代码都短,还是很有成就感的,就是好像运行时间大部分时候都在百分之五十以下,时间复杂度不太会看QAQ不过python之禅都说了,简单易懂就好~下面是题目: 给你两个有序整数数组nums1 和 nums2,请你将 nums2 合并到nums1中,使 n...

菜鸟的博客 436

LeetCode 88 合并两个有序数组

LeetCode 88 合并两个有序数组 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0...

sakurasakura1996的博客 277

leetcode88.合并两个有序数组

leetcode88.合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n。 你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。 示例: 输入: nums1 = [1,2,3,0,0,0...

yyf_blog 589

LeetCode每日一练 —— 88. 合并两个有序数组

leetcode 88. 合并两个有序数组

Edison's 小宇宙 1万+
上一篇: LeetCode | 70. 爬楼梯
下一篇: Go | pprof
yimtcode
博客等级 码龄6年 205粉丝 140原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值