• 连续自然数打乱交换排序 o(n)复杂度


    题目: 1-n之间的连续自然,被打乱了顺序,要求只用元素交换来恢复[1-n]这个序列,时间复杂o(n);

    我们知道只要涉及到元素比较的排序,其时间复杂度底线是nlogn,乍一看这个题目都会从联想到排序,其实根本不涉及到排序。这个题目给了两个核心提示:

    a: 连续

    b: 交换

    代码实现如下:

     1     public void sortShuffledSequence() {
     2         int[] arr = {2,4,1,6,5,8,9,3,10,7};
     3         for (int i = 0; i < arr.length; ++i) {
     4             while ((i + 1) != arr[i]) {
     5                 swap(arr, i, arr[i] - 1);
     6             }
     7         }
     8         System.out.println(arr);
     9     }
    10 
    11     private void swap(int [] arr, int i, int j) {
    12         int tmp = arr[i];
    13         arr[i] = arr[j];
    14         arr[j] = tmp;
    15         System.out.println("i, j " + arr[i] + " " + arr[j]);
    16     }
  • 相关阅读:
    继承与多态——动手又动脑
    类与对象--动手又动脑
    Go语言接口
    GO语言结构体
    GO指针
    GO函数
    GO获取随机数
    GO基础
    Go语言的%d,%p,%v等占位符的使用
    GO语言常量和变量
  • 原文地址:https://www.cnblogs.com/sinsonglew/p/6756109.html
Copyright © 2020-2023  润新知