领扣(LeetCode)合并两个有序数组 个人题解

给定两个有序整数数组 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]

这道题,第一想法是动态插入,但是种种错误导致了失败,特别是没有考虑到当nums1遍历完了后,nums2剩下的元素怎么处理。循环不太好写。

参考了代码,发现了还是空间换复杂度的做法。新建立一个数组存放两个数组的当前最小值,存放完了索引加1,继续寻找两个数组中的最小值。这样做下去,直到nums1遍历完或者nums2遍历完。

这时候,假设nums1没遍历完,那么nums2肯定遍历完了,就把nums1的值塞到尾部。如果nums2没遍历完,那么nums1肯定遍历完了,把nums2塞到尾部。这里可以根据当前位置的索引来判断。

参考的链接(他的题解不够详细):https://blog.csdn.net/qq_38595487/article/details/79935382

代码如下:

 1 class Solution {
 2     public void merge(int[] nums1, int m, int[] nums2, int n) {
 3         int[] newnums=new int[m+n];
 4         int index=0;
 5         int i=0,j=0;
 6         while(i<m && j<n)
 7         {
 8             if(nums1[i]<nums2[j])
 9                 newnums[index++]=nums1[i++];
10             else
11                 newnums[index++]=nums2[j++];
12         }
13         while(i<m)
14             newnums[index++]=nums1[i++];
15         while(j<n)
16             newnums[index++]=nums2[j++];
17         System.arraycopy(newnums,0,nums1,0,newnums.length);
18
19     }
20 }

原文地址:https://www.cnblogs.com/axiangcoding/p/10034469.html

时间: 2024-07-30 00:59:09

领扣(LeetCode)合并两个有序数组 个人题解的相关文章

leetcode 合并两个有序数组

给定两个有序整数数组 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] /** * @param {nu

[leetcode] 88. 合并两个有序数组

88. 合并两个有序数组 水题,没有在原数组上做,偷了个懒 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { int[] ans = new int[m + n]; int i = 0, j = 0; int top = 0; while (i < m && j < n) { if (nums1[i] < nums2[j]) { ans[top++] = nums1[i

python3实现合并两个有序数组

很早就听同学和师兄经常说刷题很重要,然而编程能力一直都很渣的我最近才开始从leetcode的初级算法开始.今天遇到的这道题虽然很简单,因为是头一次用自己的方法速度还不错,特此记录一下,还大神们请不要嘲笑菜鸡. 88/809 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. 你可以假设 nums1 有足够的空间(空间大小大于或等于

leetcode-只出现一次的数字合并两个有序数组

题目:合并两个有序数组 给定两个有序整数数组 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] 代码实现: pu

合并两个有序数组

思路: 跟替换字符串中的空格一样,都是从后往前遍历.因为从前往后遍历的话,元素需要移动的次数较多. 示意图: 代码: /****************************************** 两个有序数组的合并 by Rowandjj 2014/7/16 ******************************************/ #include<iostream> using namespace std; #define MAX 1024 //合并有序数组a与有序数

小算法:合并两个有序数组,合并之后仍然有序

1 /** 2 * 合并两个有序数组,合并后仍然有序 3 * @param a 要合并的数组A 4 * @param b 要合并的数组B 5 * @param c 合并后的数组C 6 */ 7 public static void merge(int a[] ,int b[],int c[]){ 8 int lengthA = a.length; 9 int lengthB = b.length; 10 11 int indexA = 0; 12 int indexB = 0; 13 int i

合并两个有序数组a和b到c

1 // 合并两个有序数组a和b到c 2 void Merge_Array(int a[], int n, int b[], int m, int c[]) 3 { 4 int i, j, k; 5 i = j = k = 0; 6 while(i < n && j < m) 7 { 8 if(a[i] < b[j]) 9 c[k++] = a[i++]; 10 else 11 c[k++] = b[j++]; 12 } 13 while(i < n) 14 c[k

# 88. 合并两个有序数组

88. 合并两个有序数组 题目描述 给定两个有序整数数组 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] 贴出

LeetCode寻找两个有序数组的中位数

题目: 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 不会同时为空. 示例 1: nums1 = [1, 3]nums2 = [2] 则中位数是 2.0 示例 2: nums1 = [1, 2]nums2 = [3, 4] 则中位数是 (2 + 3)/2 = 2.5 来源:力扣(LeetCode) 链接:https://leetcode-cn.