想法:
1:先把nums2中的所有元素都放到nums1,之后给合并后的数组排序
1 官方代码:
2 class Solution {
3 public void merge(int[] nums1, int m, int[] nums2, int n) {
4 for (int i = 0; i != n; ++i) {
5 nums1[m + i] = nums2[i];
6 }
7 Arrays.sort(nums1);
8 }
9 }
2:设两个数组的下标分别为i和j,当i不超过m且j不超过n时,比较nums1[i]和nums2[j],当nums1[i]大于nums2[j]时,挪动nums1中的元素,将nums2中的元素插入到此时i的位置,直到nums2指向的元素不大于nums1刚才指的元素tem
 
 
3:像之前给有序链表排序一样,建一个新的长度为m+n的数组,然后依次放元素进入新数组,之后将新数组复制到nums1中(这个方法是不是卡bug了)
 
 1 官方代码:(居然认可了?这不是卡bug吗??那要限定nums1有啥意义)
2 class Solution {
3 public void merge(int[] nums1, int m, int[] nums2, int n) {
4 int p1 = 0, p2 = 0;
5 int[] sorted = new int[m + n];
6 int cur;
7 while (p1 < m || p2 < n) {
8 if (p1 == m) {
9 cur = nums2[p2++];
10 } else if (p2 == n) {
11 cur = nums1[p1++];
12 } else if (nums1[p1] < nums2[p2]) {
13 cur = nums1[p1++];
14 } else {
15 cur = nums2[p2++];
16 }
17 sorted[p1 + p2 - 1] = cur;
18 }
19 for (int i = 0; i != m + n; ++i) {
20 nums1[i] = sorted[i];
21 }
22 }
23 }
官方解法补充:双指针逆序

方法三:逆向双指针
 
上面创造临时变量新数组,是因为如果直接合并到数组nums1,nums1中的元素可能在取出之前被覆盖(os:把他移动就不会被覆盖了,不过复杂度提升了好多)。那么如何直接避免覆盖nums1中的元素呢?观察可知,nums1的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者中的较大者放进nums1的最后面。
 
 1 class Solution {
2 public void merge(int[] nums1, int m, int[] nums2, int n) {
3 int p1 = m - 1, p2 = n - 1;
4 int tail = m + n - 1;
5 int cur;
6 while (p1 >= 0 || p2 >= 0) {
7 if (p1 == -1) {
8 cur = nums2[p2--];
9 } else if (p2 == -1) {
10 cur = nums1[p1--];
11 } else if (nums1[p1] > nums2[p2]) {
12 cur = nums1[p1--];
13 } else {
14 cur = nums2[p2--];
15 }
16 nums1[tail--] = cur;
17 }
18 }
19 }

Leecode 88.合并两个有序数组的更多相关文章

  1. Java实现 LeetCode 88 合并两个有序数组

    88. 合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元 ...

  2. [LeetCode每日一题]88. 合并两个有序数组

    [LeetCode每日一题]88. 合并两个有序数组 问题 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 初始化 n ...

  3. 【LeetCode】88. 合并两个有序数组

    88. 合并两个有序数组 知识点:数组:排序:双指针: 题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 ...

  4. Leetcode 88 合并两个有序数组 Python

    合并两个有序数组 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分 ...

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

    题目: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  6. LeetCode 88. 合并两个有序数组(Merge Sorted Array)

    题目描述 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  7. leetcode.双指针.88合并两个有序数组-Java

    1. 具体题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别 ...

  8. leetcode刷题-88.合并两个有序数组

    题目 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m ...

  9. LeetCode【88. 合并两个有序数组】

    首先想到的方法就是,假设一个nums3数组,然后,比较nums1与nums2的数值大小,然后,放在nums3中,再将nums3转移到nums1中. 实现起来很麻烦,1.没有考虑到下标问题,结果就Arr ...

  10. Leecode刷题之旅-C语言/python-88合并两个有序数组

    /* * @lc app=leetcode.cn id=88 lang=c * * [88] 合并两个有序数组 * * https://leetcode-cn.com/problems/merge-s ...

随机推荐

  1. python pip 下载出问题解决方法(超时出错)

    问题如下, 百度了一下找到了解决方法 这样的原因是连接不到国外的安装源,在下载的代码行中手动输入国内安装源 例如: pip install itchat -i https://pypi.tuna.ts ...

  2. 洛谷P5356 [Ynoi2017] 由乃打扑克

    题目 https://www.luogu.com.cn/problem/P5356 思路 由乃题,那么考虑分块(大雾,但确实分块是正解). 题面很清晰,就是求动态的区间第k小,支持区间加法操作. 根据 ...

  3. Lecture 2. Fundamental Concepts and ISA - Carnegie Mellon - Computer Architecture 2015 - Onur Mutlu

    并不只有冯诺依曼模型,按照控制流顺序执行指令 还有 data flow 模型,按照数据流顺序执行指令 冯诺依曼模型和数据流模型的编程语言的一个对比 Control-driven 编程模型和 data- ...

  4. CF1786E题解

    容易为本题的弱化版CF1786C想出一个贪心: #include<bits/stdc++.h> using namespace std; #define int long long int ...

  5. vue 切换json语言包

    1.在asstes文件夹新建 2.在main.js读取本地json语言包 3.在vue页面t这样引用

  6. Mac下Apache Tomcat安装配置技巧

    我们在MAC系统中查看网页时,一般都要使用到tomcat,这是因为appache只支持静态网页,但像asp,php,cgi,jsp等动态就需要tomcat来处理.那么该怎么在自己的MAC中安装tomc ...

  7. flask-基础篇02 请求与响应

    一.处理请求 1.URL路径参数(动态路由) # 例如,有一个请求访问的接口地址为/users/123,其中123实际上为具体的请求参数,表明请求123号用户的信息.此时如何从url中提取出123的数 ...

  8. Delphi线程中使用waitfor返回值

    使用waitfor的时候就不要再设置Freeonterminated属性了,否则会提示线程句柄错误.主要是里面使用了ExitThread方法,当线程方法执行完毕后会自动释放线程的.不过记得要重写Des ...

  9. Excel Vlookup用法和常见报错#REF! #Value!

    VLOOKUP(E2,$A$2:$C$5,2,FALSE) E2 为选中查找的条件 $A$2:$C$5 1为需要查找的区域,这个区域一般是固定的,所以要加上$符号 2这个区域可以在前面加上SHEET2 ...

  10. elementUI table 数组中各项加逗号隔开

    js处理 //this.newTableData 数组 this.newTableData.map((item,index)=>{ //item.label 数组 if(item.label){ ...