• 两顺序数组---合并---重新排序【时间复杂度小】


    一、学习借鉴

    引:上一篇文章中在合并俩数组时用到了好几个for循环,因此大大增加了时间复杂度,于是找了好多关于这方面的算法。

    请看下面事例:

     整个过程中用到的原理都在注释中。

    public static void find(){
            int[] arr1={1,3,5};
            int[] arr2={2,4,6};
            /*
             * [1 3 5]  [2 4 6]-----0 1 2(索引)
             *  0 1 2    0 1 2
             *  m=3    n=3
             *  arr1[0]<arr2[0]----成立---arr[]=[1,0,0,0,0,0]  i++=1
             *  arr1[1]<arr2[0]---不成立--arr[]=[1,2,0,0,0,0]  j++=1
             *  arr1[1]<arr2[1]---成立----arr[]=[1,2,3,0,0,0]  i++=2
             *  arr1[2]<arr2[1]---不成立--arr[]=[1,2,3,4,0,0]  j++=2
             *  arr1[2]<arr2[2]---成立----arr[]=[1,2,3,4,5,0]  i++=3=m--结束while
             * 
             */
                 int m=arr1.length;
                int n=arr2.length;
                int N=m+n;
                int[] arr=new int[N];//创建新数组--存合并后的数
                int i=0,j=0,k=0;
                while (i<m&&j<n){
                        
                    if (arr1[i]<arr2[j]){//如果从0开始,arr1中的数小于arr2中的数,则将数存在arr中  
                        arr[k++]=arr1[i++];
                    }else{
                        arr[k++]=arr2[j++];
                    }
                }
              /*  
               * 继续判断  因为i或者j某一个超过m或者n就退出了while但是数组元素并没有全部存在arr中
               * i=3不再继续  j=2<n=3继续
               */
                while (i<m) arr[k++]=arr1[i++];
                while (j<n) arr[k++]=arr2[j++];
            System.out.println(Arrays.toString(arr));

    结果:

    [1, 2, 3, 4, 5, 6]

    二、第一篇文章算法优化(java内部自带函数)

    Arrays.sort(nums);//对数组自动从小到大排序,因此避免了排序算法带来的过高时间复杂度

      等价代码:

      for (int i = 0; i < nums.length; i++) {
    
                for (int j = i + 1; j <  nums.length; j++) {
    
                    if (nums[i] >=  nums[j]) {
                        int temp =  nums[i];
                        nums[i] = nums[j];
                        nums[j] = temp;
                    }
                }
            }

    很明显嵌套for循环时间复杂度更大

  • 相关阅读:
    运用vue-awesome-swiper实现一个slide居中一个缩小显示
    IntersectionObserver
    leetcode 加一
    Cuda总结
    webrtc 视频数据 采集 发送 接收 显示
    webrtc ice代码流程走读
    webrtc sdp 组建 流程以及 sdp协议解析
    webrtc 视频参数配置
    webrtc 线程整理
    webrtc turn协议
  • 原文地址:https://www.cnblogs.com/wangsr-suc/p/8854979.html
Copyright © 2020-2023  润新知