博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
贝壳:月光宝盒的密码(二分查找,暴力破解,动态规划)
阅读量:5173 次
发布时间:2019-06-13

本文共 3028 字,大约阅读时间需要 10 分钟。

1. 题目描述

图片来源:

 

2. 代码

方法1(动态规划)81%超时  

import java.util.Scanner;
public class Main{     private static int N;//序列长度    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        N = sc.nextInt();        int [] val = new int[N];//正整数        for (int i = 0; i < N; i++) {            val[i] =  sc.nextInt();        }       int max = 0;       int [] dp = new int[N];       for (int i = 0; i < N; i++) {           for (int j = 0; j < i; j++) {             if(val[j]

方法二,AC 100 

import java.util.Scanner;
public class Main {    private static int N;//序列长度    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        N = sc.nextInt();        int [] val = new int[N];//正整数        for (int i = 0; i < N; i++) {            val[i] =  sc.nextInt();        }        int max = 0;        int [] dp = new int[N];        for(int num: val){           //二分找位置           int j = Arrays.binarySearch(dp, 0,max,num);           //找不到新增           j = j<0? -(j+1) : j;           dp[j] = num;           max = j== max?(++max):max;        }        System.out.println(max);    }   }

方法三,自己写二分查找

import java.util.Scanner;public class Main {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        int[] number = new int[n];        for (int i = 0; i < n; i++) {            number[i] = scanner.nextInt();        }        System.out.println(lengthOfLIS(number));    }    public static int lengthOfLIS(int[] nums) {        int[] top = new int[nums.length];        int piles = 0;        for (int i = 0; i < nums.length; i++) {            int poker = nums[i];             /***** 搜索左侧边界的二分查找 *****/            int left = 0, right = piles;            while (left < right) {                int mid = (left + right) / 2;                if (top[mid] > poker) {                    right = mid;                } else if (top[mid] < poker) {                    left = mid + 1;                } else {                    right = mid;                }            }            if (left == piles) piles++;            top[left] = poker;        }        return piles;    }}

方法四

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main{    public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        int n = Integer.valueOf(br.readLine().trim());        long[] nums = new long[n];        long[] dp = new long[n];        for(int i = 1; i <= n; i++) {            long temp = Long.valueOf(br.readLine().trim());            nums[i] = temp;        }             for(int i = 0; i < n; i++) {            long max = 1;            for(int j = 0; j < i; j++) {                max = Math.max(max, dp[j]+1);            }            dp[i] = max;        }        System.out.println(Arrays.stream(dp).max().orElse(0));    }}

 

 

网址:

  

 

转载于:https://www.cnblogs.com/haimishasha/p/11333148.html

你可能感兴趣的文章
zlib在Linux和windows中的使用
查看>>
rabbitMq实战使用
查看>>
JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
查看>>
javascript 倒计时
查看>>
web前端工程师入门须知
查看>>
linux--->linux 各个文件夹及含义
查看>>
欢迎使用CSD横竖屏切换问题占位
查看>>
2016集训测试赛(二十)Problem B: 字典树
查看>>
中文保存在properties乱码的解决
查看>>
poj题目分类
查看>>
idea 配置mybatis Generator 不显示的解决方案 和 配置MBG
查看>>
英语生疏了,每日至少一句吧
查看>>
创建打不开文件夹
查看>>
12 for循环
查看>>
redis(hash篇)
查看>>
Scala实战高手****第12课:Scala函数式编程进阶(匿名函数、高阶函数、函数类型推断、Currying)与Spark源码鉴赏...
查看>>
Hibernate一对多关联
查看>>
python 把函数作为参数 ---高阶函数
查看>>
jQuery + ashx 实现图片按比例预览、异步上传及显示
查看>>
android 代码中使用textAppearance
查看>>