首页 > 其他分享 >【leetcode-面试经典 150 题】-1.合并两个有序数组

【leetcode-面试经典 150 题】-1.合并两个有序数组

时间:2024-10-24 18:52:42浏览次数:3  
标签:150 arr int nums1 面试 数组 leetcode nums2 指针

题目:

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

请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。

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

分析:首先看到这是两个非递减顺序排列的整数数组,就想到利用双指针来解决该问题。顺便回顾一下双指针的板子。

首先是同向指针,把数组分成三个部分:[0,i),在这个区间的数据代表处理过并且我需要的数据,[i,j)这个区间代表我处理过但是不需要的数据,[ j , arr.length)代表我们目前没有处理过的数据。

1.定义两个指针i和j,并且i和j一般都等于0。
2.while j < arr.length:
	if 如果说我们需要arr[j],那么我们就让arr[i] = arr[j],然后i往前走
	一步,让它指向下一个位置。
	else 如果不需要j这个元素,那么我们就跳过arr[j]这个元素,让j指向下一
	个位置,同时不需要改变i的位置。

其次是异向指针,[0,i)和(j,arr.length)都是已经处理好的数据,是我们需要的,[i,j]是我们待处理的元素。

1.定义双指针,i = 0,j = arr.length - 1.
2.while i <= j:
	根据arr[i] 和 arr[j]的值来确定你接下来要做什么。
	移动至少一个指针向他们自身的方向

参考:看这一篇就够啦,双指针题型解题模板总结_双指针模板-CSDN博客

具体到本次的题目,若是利用同向指针。就是每次按照规则(那个小)取出数组1或者数组2的元素,放进另一个数组中,最终将该数组的值赋值给数组1,即满足题目要求。其中i为数组1的指针,j为数组2的指针。分为四种情况。

其他三种情况类似,就不一一解释,下面放代码:

class Solution {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i=0,j=0;
        int temp = 0;
        int[] nums3 = new int[m+n+1];
        while (i<m || j<n){
            if (i == m){
                temp = nums2[j++];
            }else if (j == n){
                temp = nums1[i++];
            }else if (nums1[i] < nums2[j]){
                temp = nums1[i++];
            }else {
                temp = nums2[j++];
            }
            nums3[i+j-1]=temp;
        }
        for (int k = 0; k!=m+n;k++){
            nums1[k] = nums3[k];
        }
    }
}

标签:150,arr,int,nums1,面试,数组,leetcode,nums2,指针
From: https://blog.csdn.net/qq_52062644/article/details/143170382

相关文章

  • 12万字的java面试题及答案整理(2024新版)
    前言本来想着给自己放松一下,刷刷博客,慕然回首,final有哪些用法?static都有哪些用法?java的精度算法?java运算逻辑?异常处理?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘***12万字的java面试题整理***final有哪些用法?final也是很多面试喜欢问的地方,但我觉得这个......
  • 大厂的JAVA经典面试题-初中级
    前言本来想着给自己放松一下,刷刷博客,慕然回首,final有哪些用法?static都有哪些用法?java的精度算法?java运算逻辑?异常处理?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘***12万字的java面试题整理***final有哪些用法?final也是很多面试喜欢问的地方,但我觉......
  • LeetCode常用算法模板
    代码模板  1、DFS:适用于树和图的遍历、组合问题。2、BFS:适用于树和图的层次遍历、最短路径问题。3、二分查找:适用于有序数组的搜索问题。4、动态规划:适用于最优化问题、序列问题。5、贪心算法:适用于局部最优问题、调度问题。6、回溯算法:适用于组合、排列、子集问题。......
  • Redis面试题
    1.Redis的简介高速内存数据库:Redis是一个存储在内存中的数据库,这意味着它的读写速度非常快,非常适合做缓存;多种数据结构:字符串、哈希散列、列表、集合;持久化选择:可以选择将数据定期存储到磁盘中,防止重启时数据丢失;事务支持:可以将一组操作看成一个整体一起执行,确保了操作的完整......
  • 150份Java计算机毕业设计项目推荐(源码+论文+PPT)
    2024最新Java项目选题推荐哈喽,大家好,大四的同学马上要开始做毕业设计了,大家做好准备了吗?博主给大家详细整理了150个Java项目选题推荐,有什么疑问可在评论区留言哦!需要链接请私信我哦!或者在评论区打出来!02:基于Java+springboot的报名系统03:基于Java+springboot的培训管理系统......
  • Leetcode每日一题:3175. 找到连续赢 K 场比赛的第一位玩家
    题意为给定一个数组,数组头两数比大小,大的放队首,小的放队尾,找到能够连续赢K次的数的编号。思路:如果一轮比较完了,没有赢K次的,那答案就是数组最大值。利用双指针,模拟一轮比较,计算每个数的胜利次数,注意,若起点不是0的话,意味着他和之前的数比较是胜出的,所以初始为1,否则初始为0;1clas......
  • [LeetCode] 951. Flip Equivalent Binary Trees
    ForabinarytreeT,wecandefineaflipoperationasfollows:chooseanynode,andswaptheleftandrightchildsubtrees.AbinarytreeXisflipequivalenttoabinarytreeYifandonlyifwecanmakeXequaltoYaftersomenumberofflipoperations......
  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词_哔哩哔哩_bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作,......
  • leetcode-1661-每台机器的平均运行时间
    链接:1661.每台机器的进程平均运行时间-力扣(LeetCode)前提条件:表: Activity+----------------+---------+|ColumnName|Type|+----------------+---------+|machine_id|int||process_id|int||activity_type|enum||timest......
  • 5道大厂的JAVA经典面试题-初中级
    前言本来想着给自己放松一下,刷刷博客,慕然回首,Java的四种引用,强弱软虚?泛型常用特点?Java创建对象有几种方式?有没有可能两个不相等的对象有相同的hashcode?深拷贝和浅拷贝的区别是什么?似乎有点模糊了,那就大概看一下5道Java基础面试题吧。好记性不如烂键盘~***12万字的java面试题......