zoukankan      html  css  js  c++  java
  • 得到最长连续递增序列

    今天作死,看到别人发出来的笔试题就开干了,这tmd还理解错题目了,连续递增序列理解成上一个=下一个-1了。

    这是我的成果,撸了4个多小时的:

    public class Test12 {
        public  static void main(String[] args){
            /**
             * 需求:找出最长的连续递增序列
             * 步骤:
             *  1、找出所有连续序列可能结果,删除不是连续递增序列的,加入集合
             *  2、集合排序,取第一个
             *  
             * 方式2:
             *  0、默认len为数组长度
             *  1、找出数组中长度为len的序列,判断是否是连续递增序列,是的话加入集合
             *  2、如果前面找出来了,直接返回,否则len = len - 1,继续走1
             *  3、取出集合中的第一个返回
             */
            Integer [] ints = new Integer[]{89,2,73,4,5,6,7,8,10,12,15,4,5,6,8,9,10,2};
    
           System.out.println(Arrays.toString(findMaxCre(ints)));
            System.out.println(Arrays.toString(findMaxCre1(ints)));
    
        }
    
        public static boolean isCreSeq(Integer[] numbers){
           boolean flag = true;
           for(int i = 0; i < numbers.length - 1; i ++){
               if(numbers[i+1] <= numbers[i]){
                   flag = false;
                   break;
               }
           }
            return flag;
        }
    
    
    
    
        public static Integer[] findMaxCre1(Integer[] ints){
          List<Integer[]> lists =  getChildLists1(ints);
          return lists.get(0);
        }
    
    
        public static List<Integer[]> getChildLists1(Integer[] ints){
            List<Integer[]> lists = new ArrayList<Integer[]>();
            if(ints == null || ints.length <= 1){
                return lists;
            }
            int len = ints.length;
            for(int i = len; i > 0; i--){
                boolean hasValue = false;
                for(int j = 0; j < len; j++){
                    if(j + i < len){
                        Integer[] nums = new Integer[i];
                        nums = Arrays.copyOfRange(ints, j, j + i);
                        if(isCreSeq(nums)){
                            lists.add(nums);
                            hasValue = true;
                        }
                    }
                }
                if(hasValue){
                    break;
                }
            }
            return lists;
        }
    
        public static Integer[] findMaxCre(Integer[] ints){
            List<Integer[]> allQue = new ArrayList<Integer[]>();
            allQue.addAll(getChildLists(ints));
            Collections.sort(allQue, new Comparator<Integer[]>() {
                public int compare(Integer[] o1, Integer[] o2) {
                    return o2.length - o1.length;
                }
            });
            return allQue.get(0);
        }
    
        public static List<Integer[]> getChildLists(Integer[] ints){
            List<Integer[]> lists = new ArrayList<Integer[]>();
            if(ints == null || ints.length <= 1){
                return lists;
            }
            int len = ints.length;
            for(int i = 0; i < len ; i++){
                Integer[] row = new Integer[len - i];
                row = Arrays.copyOfRange(ints, i, len);
                int rowLength = row.length;
                for(int j = 1; j <= rowLength; j++){
                    Integer[] nums = new Integer[j];
                    nums = Arrays.copyOfRange(row, 0, j);
                    if(isCreSeq(nums)){
                        lists.add(nums);
                    }
                }
            }
            return lists;
        }
    }

    我的思想是怎么转化为代码的呢?

    这个我使用了画图的方式,依据你图纸的步骤,你可以更清晰的写出代码,不容易混乱掉!

  • 相关阅读:
    b_lc_第k个排列(暴搜 / 数学剪枝)
    sql语句大全(2)
    经典SQL语句大全
    存储过程格式
    经典SQL语句大全(实例)非常不错的和excel等文档实例结合的sql
    触发器MSSQL常用操作
    最好的C#学习网站
    C# 反射入门知识
    MSSQL经典语句
    一些很酷的.Net技巧
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/7056403.html
Copyright © 2011-2022 走看看