zoukankan      html  css  js  c++  java
  • 88. 合并两个有序数组

    这题可以利用双指针倒排得办法。

    我们创建3个指针,分别指向p1,p2分别指向数组1,2得末尾,p3指向数组1得末尾。

    从后向前数组遍历nums1,从尾部值开始比较遍历,迭代比较值大小之后,使用较大得元素对nums1[p3]进行填充,
    当 p1<0 时遍历结束,此时 nums2 中可能存在数据未拷贝完全(即当p1=0时,p2>0),将其直接填充到 nums1 的前面,最后得到结果数组

    时间O(m+n)(需要完整的遍历一遍nums1和nums2),空间O(1)

    public void merge(int[] nums1, int m, int[] nums2, int n) {
            int p1 = m-1,p2=n-1,p3=m+n-1;
            while(p2>=0 && p1>=0){
            // 选出较大得值对nums1[p3]进行填充,由后向前递推
    if (nums1[p1]>=nums2[p2]){ nums1[p3--]=nums1[p1--]; }else{ nums1[p3--]=nums2[p2--]; } }
    // 可能存在当p1=0时,p2>0,因此需要继续填充
    while(p2>=0){ nums1[p3--]=nums2[p2--]; } }
    争取早日不再是一只菜鸡
  • 相关阅读:
    matlab-vrep程序控制方法
    .ipyb文件怎么转成 .py文件
    python技巧
    gradle初步认识
    StringUtils
    Elasticsearch、Logstash和Kibana ELK
    redisTemplate、jedis、redission的对比
    唯一ID
    spring相关组件简介
    新电脑环境配置
  • 原文地址:https://www.cnblogs.com/jchen104/p/14622217.html
Copyright © 2011-2022 走看看