• 【LeetCode】88. Merge Sorted Array


    题目:

    给定两个已经排序的整数数组nums1和nums2,将nums2合并到nums1中,使之成为一个有序的数组。

    nums1和nums2中的元素个数分别为m和n,nums1中有足够的空间来存放nums2中的元素。

    思路:

    构造一个大小为m+n的数组arr,然后开始遍历nums1(用nums1[i]表示)和nums2(用nums2[j]表示),

    如果nums1[i] < nums2[j],就把nums1[i]填入arr中,否则将nums2[j]填入arr中;

    如果nums1和nums2中有一个已经遍历完了,就把另一个数组剩下的元素直接填入arr。

    最后把arr中的元素回填入nums1,完毕。

    #include <stdio.h>
    #include <stdlib.h>
    
    void merge(int* nums1, int m, int* nums2, int n) {
        int* arr = malloc(sizeof(int) * (m+n));
        int i = 0, j = 0, k = 0;
        while (i<m && j<n) {
            if (nums1[i] < nums2[j]) {
                arr[k] = nums1[i];
                i++;
            }
            else {
                arr[k] = nums2[j];
                j++;
            }
            k++;
        }
        while (i < m) {
            arr[k] = nums1[i];
            i++;    k++;
        }
        while (j < n) {
            arr[k] = nums2[j];
            j++;    k++;
        }
        for (i=0; i<k; i++) 
            nums1[i] = arr[i];
    }
    
    int main()
    {
        int nums1[100] = {3, 5, 7, 11, 23};
        int nums2[4] = {1, 4, 9, 10};
        merge(nums1, 5, nums2, 4);
        for (int i=0; i<9; i++) {
            printf("%d ", nums1[i]);
        }
        printf("
    ");
        return 0;
    }

    结果:

    效率还是很不错的。

    其实用插入排序也是可以的,但是效率比较低。


    参考:一起玩算法03

    推荐一位干货up主:正月点灯笼

  • 相关阅读:
    linux端口开放指定端口的两种方法
    关于JqueryCheck选中获取数据
    ASP.NET MVC 简单分页代码
    ASP.NET MVC4分页Site.CSS
    SQL索引的优缺点
    SQL字段数据类型小技巧
    数据库强制完整性的机制
    WinFrom饼形图
    WinFrom折线图
    WinFrom柱形图
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12433597.html
Copyright © 2020-2023  润新知