小明爬山(最长上升子序列)

编程入门 行业动态 更新时间:2024-10-07 21:33:58

<a href=https://www.elefans.com/category/jswz/34/1758602.html style=小明爬山(最长上升子序列)"/>

小明爬山(最长上升子序列)

小明爬山(最长上升子序列)

  • 问题描述
  • 算法思路
  • 代码

问题描述

问题描述
你有个同学叫小明,他早听闻祖国河山秀丽,于是有一个爬山的计划,并列了一张所有山的高度表,而又因“人往高处走”的说法,所以他希望爬的每一座山都比前一座要高,并且不能改变山的高度表上的顺序,爬的山数还要最多,请贵系的你帮他解决这个问题。

输入格式

输入第一行为num,代表山的个数   输入第二行有num个整数,代表每座山的高度

输出格式

输出只有一个数,为符合要求的最大爬山数

样例输入

10 1 3 5 7 9 2 4 6 8 10

样例输出

6

(样例说明:选择1 3 5 7 8 10)

样例输入

10 1 3 2 7 5 4 5 6 10 11

样例输出

7

(样例说明:选择1 2 4 5 6 10 11)

数据规模和约定

对于100%的数据,num <= 100000,高度<=10000。

算法思路

choise[i]存放以arr[i]结尾的最长上升子序列的长度

  chose[i]=Math.max(chose[i],chose[j]+1);  //chose[i]  num

代码

import java.util.Arrays;
import java.util.Scanner;/*** @author admin*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int num = scanner.nextInt();int[] arr = new int[num];int[] chose = new int[num];for (int i = 0; i < num; i++) {arr[i] = scanner.nextInt();}Arrays.fill(chose,1);for (int i = 1; i < num; i++) {for (int j = 0; j < i; j++) {if (arr[i] > arr[j]) {chose[i]=Math.max(chose[i],chose[j]+1);}}}Arrays.sort(chose);System.out.println(chose[num-1]);
}}

但是时间复杂度达到了O(n²),导致了只通过了四个测试点

优化的还在想,后续。。。。

更多推荐

小明爬山(最长上升子序列)

本文发布于:2024-02-13 17:44:31,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1759751.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小明   序列   最长

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!