得到最长连续递增序列

今天作死,看到别人发出来的笔试题就开干了,这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;
    }
}

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

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

时间: 2024-10-29 19:12:32

得到最长连续递增序列的相关文章

LeetCode 674. 最长连续递增序列(Longest Continuous Increasing Subsequence) 18

674. 最长连续递增序列 674. Longest Continuous Increasing Subsequence 题目描述 给定一个未经排序的整型数组,找到最长且连续的递增序列. Given an unsorted array of integers, find the length of longest continuous increasing subsequence (subarray). 每日一算法2019/5/21Day 18LeetCode674. Longest Conti

LeetCode - 最长连续递增序列

题目描述: 给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3.尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开. 示例 2: 输入: [2,2,2,2,2] 输出: 1 解释: 最长连续递增序列是 [2], 长度为1. code: public class Solution { public int findLengthOfLCIS(i

LeetCode 674. Longest Continuous Increasing Subsequence最长连续递增序列 (C++/Java)

题目: Given an unsorted array of integers, find the length of longest continuous increasing subsequence (subarray). Example 1: Input: [1,3,5,4,7] Output: 3 Explanation: The longest continuous increasing subsequence is [1,3,5], its length is 3. Even tho

[LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列

Given an unsorted array of integers, find the length of longest continuous increasing subsequence. Example 1: Input: [1,3,5,4,7] Output: 3 Explanation: The longest continuous increasing subsequence is [1,3,5], its length is 3. Even though [1,3,5,7] i

【算法】——查找:最长连续递增子序列(部分有序)

找出在数组中的最长递增子序列 数组:1,9,2,5,7,3,4,6,8,0 最长递增子序列:3,4,6,8 思路: 遇到大的就移动,如果在某一个位置变小了就计算这一段的长度(双指针)不停更新最大的length一个在前线,一个在后面作为游标,最后结束了看一下战线拉了有多长 public class 最长递增子序列 { public static void main(String[] args) { int []arr = {0,1,0,1,2,3,1,2,0,1,2,3,4,5,1}; getLa

任意区间的最长连续递增子序列,最大连续子序列和

hdu3308 给n个数,有m个操作 U a b 表示将第a个数改成b Q a b 表示询问区间[a,b]的最长连续递增子序列. 区间询问问题且带修改,一般是用线段树来解决 那么要维护 Llen[rt], Lval[rt][2] 表示rt所对应的区间[l,r] 以l开头的最长连续递增子序列的长度, Lval[rt][0]表示子序列的最左边的值,Lval[rt][1]表示子序列最右边的值 Rlen[rt],Rval[rt][2]  表示rt所对应的区间[l,r]以r结尾的最长连续递增子序列的长度,

ALBB 找公共最长连续字母序列的长度

问题描写叙述 给定一个 query 和一个 text .均由小写字母组成.要求在 text 中找出以相同的顺序连续出如今 query 中的最长连续字母序列的长度. 比如, query为"acbac".text为"acaccbabb",那么text中的"cba"为最长的连续出如今query中的字母序列,因此,返回结果应该为其长度3.请注意程序效率. 代码思想 1.遍历两字符串的每个元素,遇见同样元素则计算该次同样次数同样元素数目.并与之前最大值比較

最长连续字母序列的长度(阿里2015在线研发工程师笔试题)

给定一个query和一个text,均由小写字母组成.要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度.例如, query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3.请注意程序效率. 直接暴力,时间复杂度:m*n*n int Solve(char qu[],int n,char te[],int m) { int i,j; int k,p; int Max; in

3.分治法研究-搜索数组中的最长连续递增子集

//分治算法研究 搜索数组中的最长连续递增子集var cc=consolefunction find_max_crossing_lenarray(A,low,mid,high){    var max_left=mid,max_right=mid    var left_sum=1    var sum=0    for(var i=mid;i>low;i--){        sum=A[i]-A[i-1]        if(sum==1){            left_sum++