首页 > 编程语言 > 详细

leet-code-第88题(简单) 合并两个有序数组

时间:2021-04-02 15:06:56      阅读:34      评论:0      收藏:0      [点我收藏+]

题目描述:

给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。

初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]

提示:

nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[i] <= 109

直觉解法:

设置双指针,分别指向nums1与nums2,当均不为空时,比较指向值的大小,选择小的一个放进temp数组中,并指针与temp数组的mark++,如果两者相等,则一起放入,并移动两个指针

最后将不为空的nums1或者nums2剩下的数放temp后,然后temp值赋给nums1。

 1 class Solution {
 2     public void merge(int[] nums1, int m, int[] nums2, int n) {
 3         int i = 0;
 4         int j = 0;
 5         int []temp = new int[nums1.length];
 6         int mark = 0;
 7         //两个数组均不为空
 8         while (i<m && j<n){
 9             int flag = nums1[i] - nums2[j];
10             if (flag>0){
11                 flag = 1;
12             }else if (flag<0){
13                 flag = -1;
14             }else {
15                 flag = 0;
16             }
17             switch (flag){
18                 case 0:
19                     temp[mark] = nums1[i];
20                     temp[mark+1] = nums2[j];
21 
22                     if (mark<nums1.length){
23                         i++;
24                         j++;
25                         mark+=2;
26                     }
27                     break;
28                 case 1:
29                     temp[mark] = nums2[j];
30                     if (mark<nums1.length){
31                         mark++;
32                         j++;
33                     }
34                     break;
35                 case -1:
36                     temp[mark] = nums1[i];
37                     if (mark<nums1.length){
38                         i++;
39                         mark++;
40                     }
41                     break;
42             }
43 
44         }
45         while (i<m){
46             temp[mark] = nums1[i];
47             i++;
48             mark++;
49         }
50 
51         while (j<n){
52             temp[mark] = nums2[j];
53             j++;
54             mark++;
55         }
56         for(int l = 0 ;l<nums1.length;l++){
57             nums1[l] = temp[l];
58         }
59     }
60 }

 

 

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

leet-code-第88题(简单) 合并两个有序数组

原文:https://www.cnblogs.com/charler/p/14609764.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!