• MergeSortedArray,合并两个有序的数组


    问题描述:You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.

    算法分析:合并两个数组,但是合并后的数组是原来的数组1,不能新建空间,假设数组1有足够的空间,从后往前遍历,避免覆盖问题。同类问题还有合并两个有序的链表,链表和数组的问题都相似。

    //从后往前遍历比较,不会遇到覆盖的问题
    public class MergeSortedArray
    {
    	public void merge(int[] nums1, int m, int[] nums2, int n) 
    	{
    		int i = m-1, j = n-1;
    		int z = m+n-1;
            while(i >= 0 && j >= 0)
            {
            	if(nums1[i] > nums2[j])
            	{
            		nums1[z--] = nums1[i--];
            	}
            	else
            	{
            		nums1[z--] = nums2[j--]; 
            	}
            }
            if(i < 0)
            {
            	for(int k = j; k >= 0; k --)
            	{
            		nums1[z--] = nums2[k];
            	}
            }
        }
    }
    

    合并两个有序链表:

    public class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dumy = new ListNode(0);
            ListNode head = dumy;
            while(l1 != null && l2 != null)
            {
                if(l1.val < l2.val)
                {
                    dumy.next = l1;
                    l1 = l1.next;
                }
                else
                {
                    dumy.next = l2;
                    l2 = l2.next;
                }
                dumy = dumy.next;
            }
            if(l1 == null)
            {
                dumy.next = l2;
            }
            if(l2 == null)
            {
                dumy.next = l1;
            }
            return head.next;
        }
    }
    
  • 相关阅读:
    经典网络命令(搜集、概括)
    浅谈“五万月薪涉足数据恢复行业”
    C语言宏定义技巧(常用宏定义)
    安装IIS5.0出错
    IDM(Internet Download Manager)下载
    tape记忆法
    华为手环更换绑定手机
    冯况 | 清理电脑磁盘
    利用知网查个人信息
    双向循环链表
  • 原文地址:https://www.cnblogs.com/masterlibin/p/5800786.html
Copyright © 2020-2023  润新知