[LC]88题 Merge Sorted Array (合并两个有序数组 )
①英文题目
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
The number of elements initialized in nums1 and nums2 are m and n respectively.
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2.
Example:
Input:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
Output: [1,2,2,3,5,6]
②中文题目:
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,3,0,0,0], m = 3
nums2 = [2,5,6], n = 3
输出: [1,2,2,3,5,6]
③思路:这个题,倒序比顺序好做一些。首先想好,用3个变量来索引,i,j,k分别指向num1的末位、nums2的末位,混合后的数组的末位。每次处理完之后,都要减减1下。但其中要注意,只有参与了移动的索引才会减减1下。
用while循环,i和j都大于等于0为条件。 两个数组元素相比,谁大就把谁赋值给混合数组的末位。
另外,当i已经自减为负数而j还为正数(也就是说nums2数组长度比nums1长些)时,直接把剩余还没分配走的nums2的值,一一赋给混合数组的前几位。
由于我就是把nums1当成混合后的数组,所以,当j自减为负数而i还是正数的时候,不用做任何处理了,也就是说,我的代码里的17-21行可以删除掉(我代码里已经写出来方便举例子)。
④代码:
1 class Solution { 2 public void merge(int[] nums1, int m, int[] nums2, int n) { 3 int i=m-1; 4 int j=n-1; 5 int k=m+n-1; 6 while(i>=0 && j>=0){ 7 if(nums1[i]>=nums2[j]) 8 nums1[k--]=nums1[i--]; 9 else 10 nums1[k--]=nums2[j--]; 11 } 12 if( j>=0 ){ 13 for(int p=0 ; p<j+1; p++){ 14 nums1[p] = nums2[p]; 15 } 16 } 17 // if( i>0 ){ 18 // for(int p=0 ; p<i+1;p++){ 19 // nums1[p]= nums1[p]; 20 // } 21 //} 22 } 23 }
原文地址:https://www.cnblogs.com/zf007/p/11520760.html
- 1854: [Scoi2010]游戏
- Javascript字符串
- Codevs3278[NOIP2013]货车运输
- 关于使用lazytag的线段树两种查询方式的比较研究
- Java 持久化操作之 --XML
- 算法模板——splay区间反转 1
- 3223: Tyvj 1729 文艺平衡树
- 1212: [HNOI2004]L语言
- POJ 2942Knights of the Round Table(tarjan求点双+二分图染色)
- 算法模板——平衡树Treap
- Java并发编程
- 算法模板——线段树2(区间加+区间乘+区间求和)
- 1798: [Ahoi2009]Seq 维护序列seq
- 【LeetCode 389】 关关的刷题日记30 Find the Difference
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法