Leetcode - 合并两个有序数组 E[88]

news/2024/7/8 7:24:32

问题描述

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

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

示例 1:
        输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
        输出:[1,2,2,3,5,6]
        解释:需要合并 [1,2,3] 和 [2,5,6] 。
        合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
示例 2:
        输入:nums1 = [1], m = 1, nums2 = [], n = 0
        输出:[1]
        解释:需要合并 [1] 和 [] 。
        合并结果是 [1] 。
示例 3:
        输入:nums1 = [0], m = 0, nums2 = [1], n = 1
        输出:[1]
        解释:需要合并的数组是 [] 和 [1] 。
        合并结果是 [1] 。
        注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。
提示:
     nums1.length == m + n
     nums2.length == n
     0 <= m, n <= 200
     1 <= m + n <= 200
     -109 <= nums1[i], nums2[j] <= 109

 思路

        nums1 和 nums2 两个数组是有序的,所以后面的数字一定比前面的数字大,nums1 的大小为  m + n ,我们可以将两个数组从后向前比较,并将较大的数字逐渐存储到 nums1 中

算法

        根据思路编写程序,用一个变量 len 存储 nums1的长度,以 nums1[--len]的方式向 nums1 中存储数据。

         注意:

                1. m, n 是两个数组存储整数的大小,m 不等于 nums1 数组的长度

                2. nums1 和 nums2 的长度不一,通过下表获取属性的时候需要进行变换防止产生

           NullPointerException 的错误。

代码

class Solution {
        public void merge(int[] nums1, int m, int[] nums2, int n) {
            /* 数组nums1的长度 */
            int len = m + n;
            while (m >= 1 || n >= 1) {
                /* 变换得到数组中存储的数据 -[m 和 n 一定概率不相等] */
                int v1 = m - 1 >= 0 ? nums1[m - 1] : -110;
                int v2 = n - 1 >= 0 ? nums2[n - 1] : -110;
                /* 判断并向nums1中存储元素 */
                if (v1 >= v2) {
                    nums1[--len] = v1;
                    m--;
                    continue;
                }
                nums1[--len] = v2;
                n--;
            }
        }
    }

执行结果


http://www.niftyadmin.cn/n/4557801.html

相关文章

Leetcode - 二进制求和 E[67]

题目描述 给你两个二进制字符串&#xff0c;返回它们的和&#xff08;用二进制表示&#xff09;。 输入为 非空 字符串且只包含数字 1 和 0。示例 1:输入: a "11", b "1"输出: "100" 示例 2: 输入: a "1010", b "1011" …

抽象类的继承

接口中有定义的方法 具体方法功能代码可以不写&#xff09;如果是继承接口 也要把方法名照写上 即使不知道具体干某些事情 具体干某些事情 就必须对抽象类中的每个方法都进行实现(换种说法就是具体化 abstract class cWeapon{ int damage; abstract int setDamage(); abstract …

Leetcode - 无重复字符的最长字串 M[3]

问题描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。 示例 2:输入: s "bbbbb"输出: 1解释: 因为无…

asp.netmvc 三层搭建一个完整的项目

接下来用 asp.net mvc 三层搭建一个完整的项目&#xff1a; 架构图: 使用的数据库: 一张公司的员工信息表&#xff0c;测试数据 解决方案项目设计&#xff1a; 1.新建一个空白解决方案名称为Company 2.在该解决方案下,新建解决方案文件夹(UI,BLL,DAL,Model) 当然还可以加上comm…

eclipse 编的java程序运行后显示问号

在Resource中把编码改成GBK或者是GB2312 ||| 改为GB2312 或者 GBK 就不会了 选中properties属性 你右键单击该类 在右边选择GBk 答案补充 直接输入GBK就行了 答案补充 选择下面的others ||| 在我这里都没错啊 然后找到resource 选择Properties 然后找到你的文件点击右键 在reso…

Leetcode - 杨辉三角II E[119]

问题描述 给定一个非负索引 rowIndex&#xff0c;返回「杨辉三角」的第 rowIndex 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1:输入: rowIndex 3输出: [1,3,3,1] 示例 2:输入: rowIndex 0输出: [1] 示例 3:输入: rowIndex 1输出: [1,1] 提…

JAVA的 计机二级 那个网站有<南开一百题>买

cid2F35BFABE23E23FFCF1629CD90A9223FB4FAD7DC&t2&fmt- 答案补充 淘宝上多的是 cid8FF7C259950B06053CC5E9A71270E178E387F7AB&t13&fmt-下种子 答案补充 java :http://119.147.41.16/down 迅雷http://119.147.41.16/down

BZOJ 4395: [Usaco2015 dec]Switching on the Lights

4395: [Usaco2015 dec]Switching on the Lights Description Farmer John has recently built an enormous barn consisting of an NNNN grid of rooms (2≤N≤100), numbered from (1,1)up to (N,N). Being somewhat afraid of the dark, Bessie the cow wants to turn on the…