Flutter开发App的未来及其在各行业的应用潜力分析
666
2022-11-18
【LeetCode 88】合并两个有序数组
题目描述
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。
说明:
初始化nums1 和nums2 的元素数量分别为 m 和 n 。你可以假设nums1 有足够的空间(空间大小大于或等于 m + n)来保存nums2 中的元素。
示例:
输入:nums1 = [1,2,3], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]
解题思路
首先看到这个题目,我们应该能想到使用双指针来解决这个问题。
首先把两个指针分别指向两个数组生效部分的尾部每次两个指针所指向的值进行对比,将较大的值放在nums1的后面,并往前填补
这就是实现该题的步骤,但是我们还需要考虑一个问题,就是我们不确定是哪个数组先遍历完,这会对最后的几个产生影响,那就只有两种情况:
nums1先执行完,那就意味着nums1的头部空出来了,直接把nums2放在nums1前面即可nums2先执行完,那本身就是再往nums1中填值所以就不用管了,得到的就是最终的结果
代码实现
/** * @param {number[]} nums1 * @param {number} m * @param {number[]} nums2 * @param {number} n * @return {void} Do not return anything, modify nums1 in-place instead. */var merge = function(nums1, m, nums2, n) { //初始化指针:i指向nums1的结尾,j指向nums2的结尾,k指向合并后的最后一位 let i =m-1, j = n-1, k = m+n-1; while(i>=0 && j>=0){ if(nums1[i]>=nums2[j]){ nums1[k] = nums1[i] i-- k-- }else{ nums1[k]=nums2[j] j-- k-- } } // 处理nums1先执行完的情况 while(j>=0){ nums1[k] = nums2[j] j-- k-- }};
提交结果
(很惊讶,内存消耗竟然超过了100%的用户~)
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~