zoukankan      html  css  js  c++  java
  • 什么是字典序算法?

    @Test
    public void test() {
    int[] nums={1,5,3,2,4};
    int[] nearestNumber = findNearestNumber(nums);
    System.out.println(Arrays.toString(nearestNumber));
    }

    static int[] findNearestNumber(int[] numbers) {
    int[] numbersCopy = Arrays.copyOf(numbers, numbers.length);
    //找到逆序区域前一位
    int index=findTransferPoint(numbersCopy);
    //如果数字置换边界为0,说明整个数组已经逆序,无法得到更大的相同数
    if(index == 0){
    return null;
    }
    //把逆序区域的前一位和刚大于它的数字进行交换
    exchangeHead(numbersCopy,index);
    //把原来的逆序改成顺序
    reverse(numbersCopy,index);
    return numbersCopy;
    }

    private static int[] reverse(int[] numbers, int index) {
    for (int i = index+1; i < numbers.length-1; i++) {
    if(numbers[i] > numbers[i+1]){
    int temp=numbers[i+1];
    numbers[i+1]=numbers[i];
    numbers[i]=temp;
    }
    }
    return numbers;
    }

    private static int[] exchangeHead(int[] numbers, int index) {
    int head=numbers[index-1];
    for (int i = numbers.length-1; i > 0 ; i--) {
    if(head < numbers[i]){
    numbers[index-1]=numbers[i];
    numbers[i]=head;
    break;
    }
    }
    return numbers;
    }

    private static int findTransferPoint(int[] numbers) {
    for (int i = numbers.length-1; i >0 ; i--) {
    if(numbers[i]>numbers[i-1]){
    return i;
    }
    }
    return 0;
    }


    原文:https://mp.weixin.qq.com/s/_mIeGKdvTOH-1jleJ4aADg
  • 相关阅读:
    shell 逻辑操作符
    shell 整数
    shell 字符串
    常用文件测试操作符
    系统级脚本 rpcbind
    shell 特殊字符
    redhat7.5 升级OpenSSH_7.8p1
    kubernetes 项目
    salt 安装kubernetes集群3节点
    web应用
  • 原文地址:https://www.cnblogs.com/dongma/p/10090312.html
Copyright © 2011-2022 走看看