Java
文章平均质量分 51
SIAT_啊哦
啊哦
展开
-
动态规划:回文串系列
1、最长回文子串寻找回文串的问题核心思想是:从中间开始向两边扩散来判断回文串for 0 <= i < len(s): 找到以 s[i] 为中心的回文串;(奇数) 找到以 s[i] 和 s[i+1] 为中心的回文串 (偶数) 更新答案class Solution { public String longestPalindrome(String s) { String result=""; for(int i=0;i<原创 2021-03-08 11:04:44 · 422 阅读 · 0 评论 -
动态规划:KMP字符串匹配
public class KMP{ private int[][] dp; private String pat; public KMP(String pat){ this.pat = pat; int M = pat.length(); dp = new int[M][256]; // dp[状态][遇到的字符] = 下个状态 dp[0][pat.charAt(0)] = 1; //.原创 2021-03-07 16:05:52 · 315 阅读 · 0 评论 -
动态规划:打家劫舍系列问题
1、数组类型你面前房子的索引就是状态,抢和不抢就是选择。public int rob(int[] nums) { int n = nums.length; int[] dp = new int[n+2]; //dp[i]表示从i到最后一个房子最多能盗取的金额 for(int i=n-1;i>=0;i--){ dp[i] = Math.max(dp[i+1], nums[i]+dp[i+2]); }原创 2021-03-05 11:42:48 · 254 阅读 · 1 评论 -
动态规划:四键键盘
对于「按 A 键」这种情况,就是状态 i - 1 的屏幕上新增了一个 A 而已,很容易得到结果:dp[i] = dp[i - 1] + 1; // 按 A 键,就比上次多一个 A 而已但是,如果要按 C-V,还要考虑之前是在哪里 C-A C-C 的。刚才说了,最优的操作序列一定是 C-A C-C 接着若干 C-V,所以我们用一个变量 j 作为若干 C-V的起点(应该看作C-C的位置)。那么 j - 1 、j 操作就应该是 C-A C-C 了:public int maxA(int N) {...原创 2021-03-03 14:33:07 · 319 阅读 · 0 评论 -
动态规划:博弈问题之石子游戏
方法一:数学法先手可以控制自己拿所有下标为奇数的石堆或者拿所有下标为偶数的石堆,只要先计算一下奇数石堆的石子总数和偶数石堆的石子总数哪种多就选哪种,所以先手总会赢return true;方法二:动态规划假设先手和后手都最聪明的情况下,返回先手和后手拿到的石头个数之差dp数组定义:dp[i][j][0]从下标i到j堆石头,先手能获得的最大数量;dp[i][j][1]表示后手public boolean stoneGame(int[] piles) { int n = pi.原创 2021-03-02 11:10:18 · 360 阅读 · 0 评论 -
动态规划:戳气球
1、题目说可以认为nums[-1] = nums[n] = 1,那么我们先直接把这两个边界加进去,形成一个新的数组points2、dp[i][j] = x表示,戳破气球i和气球j之间(开区间,不包括i和j)的所有气球,可以获得的最高分数为x。3、我们需要「反向思考」,想一想气球i和气球j之间最后一个被戳破的气球可能是哪一个?4、其实气球i和气球j之间的所有气球都可能是最后被戳破的那一个,不防假设为k。回顾动态规划的套路,这里其实已经找到了「状态」和「选择」:i和j就是两个「状态」,最后戳破的那个气..原创 2021-02-26 11:08:38 · 258 阅读 · 0 评论 -
动态规划:高楼扔鸡蛋
方法一:常规动态规划1、dp[i][j]数组定义:dp[i][j]表示鸡蛋数量为i,可选楼层数为j的状态下确定F的最少步数,问题所求为dp[K][N]2、base case:当楼层数为0,步数为0;当楼层数为1,步数为1;当鸡蛋数为0,步数为0;当鸡蛋数为1,步数为楼层数3、求状态(i,j)的情况下最少的步数,可选楼层数为j,则遍历1到j的所有楼层,开始扔鸡蛋4、当前在h楼扔鸡蛋,步数首先加1,然后分别求鸡蛋破或者没破的最大步数值,作为当前楼扔的值,再求所有楼层扔的最小值5、时间复杂度O(KN.原创 2021-02-24 15:32:03 · 422 阅读 · 0 评论 -
动态规划:正则表达式匹配
public boolean isMatch(String s, String p) { int m = s.length(); int n = p.length(); boolean[][] dp = new boolean[m + 1][n + 1]; dp[0][0] = true; for(int i = 0; i <= m; i++){ for(int j = 1; j <= n..原创 2021-02-23 14:07:24 · 170 阅读 · 0 评论 -
贪心算法:跳跃游戏
1、能否跳到最后2、用最少的跳跃次数i和end标记了可以选择的跳跃步数,farthest标记了所有可选择跳跃步数[i..end]中能够跳到的最远距离,jumps记录了跳跃次数。原创 2021-02-22 10:24:47 · 194 阅读 · 1 评论 -
贪心算法:区间调度
首先对所有区间按照结束end时间先后进行排序从排序后的第一个区间开始遍历,把第一个区间结束的时间end作为标准,若第二个区间与第一个区间相交,则删除;若不相交,则将第二个区间的结束时间更新为end作为新的标准;public int OverlapIntervals(int[][] intervals) { Arrays.sort(intervals,(a,b)->a[1]-b[1]); int count = 1; int end =..原创 2021-02-22 10:16:19 · 288 阅读 · 0 评论 -
动态规划:背包问题
0-1背包问题 和 完全背包问题 的区别在于:前者每个物品的个数是有限的;后者每个物品的个数是无限的。也就是为什么当选择将当前物品放进背包时,完全背包是dp[i][…]而不是dp[i-1][…]动态规划框架:0-1背包模板:完全背包模板:for(int i=1;i<=n;i++){ for(int j=1;j<=amount;j++){ if(j<coins[i-1]){ d原创 2021-02-22 09:57:29 · 120 阅读 · 0 评论 -
再谈jdk && eclipse
一个月前谈过一次,但是今天的事件足足折腾了我一个晚上!!!不记录下来对不起我自己,~T_T~~~首先是我大概一个月之前安装了jdk(忘了什么版本),安装了Eclipse Java Neon,然后接下来的日子我写的Java全是在IDE上面编译运行的,然后我觉得这样不怎么好,就改成用sublime写,在控制台运行,but,在独立控制台执行如下命令时: javac Test.java竟然说无法访问原创 2016-08-27 00:31:40 · 823 阅读 · 0 评论 -
Java 日期时间
Java日期时间java.util包提供了Date类来封装当前的日期和时间。 Date类提供两个构造函数来实例化Date对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。Date(long millisec)Date对象创建以后,可以调用下面的方法。boolean after(Date date)若当调用此方法的D原创 2016-08-18 16:29:20 · 574 阅读 · 0 评论 -
第三章 类与对象
类类可以看成是创建Java对象的模板。通过下面一个简单的类来理解下Java中类的定义:public class Dog{ String breed; int age; String color; void barking(){ } void hungry(){ } void sleeping(){ }}一个类可以包含以下类型变量:局部变量:在方法原创 2016-08-19 17:44:43 · 1142 阅读 · 0 评论 -
Java数据结构
Java数据结构Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:枚举(Enumeration)位集合(BitSet) 向量(Vector) 栈(Stack) 字典(Dictionary) 哈希表(Hashtable) 属性(Properties) 以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection)枚举(Enu原创 2016-08-22 00:19:51 · 792 阅读 · 0 评论 -
Java集合框架
早在Java 2之前,Java就提供了特设类。比如:Dictionary, Vector, Stack, 和Properties这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用Vector类的方式和使用Properties类的方式有着很大不同哦。 so,集合框架被设计成要满足以下几个目标:该框架必须是高性能的。基本集合(动态数组,链表,树,原创 2016-08-22 14:56:21 · 464 阅读 · 1 评论 -
Java范性
Java泛型相当于是C++中的模板。泛型方法可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。下面是定义泛型方法的规则:所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变原创 2016-08-22 15:26:35 · 2398 阅读 · 0 评论 -
第四章 Java的I/O流和异常处理
Java.io包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。 Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。读取控制台输入Java的控制台输入由System.i原创 2016-08-22 23:05:56 · 2854 阅读 · 0 评论 -
Java数据库编程
JDBC概述JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。 JDBC并不能直接访问数据库,需要借助于数据库厂商提供的JDBC驱动程序。数据库连接如原创 2016-08-24 16:23:03 · 503 阅读 · 0 评论 -
第二章 Java语言基础
基本语法编写Java程序时,应注意以下几点:大小写敏感: Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。类名: 对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。方法名: 所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。源文件名: 源文件名必原创 2016-08-18 13:28:40 · 1069 阅读 · 0 评论 -
第一章 Java概述
Eclipse安装下载地址为http://www.eclipse.org/downloads/下载页面列出了不同语言的Eclipse IDE,可以根据自己需要下载。 Eclipse的每个安装包都不同,Java开发人员通常使用 Eclipse IDE for Java Developers 来开发 Java 应用。列表右侧提供了Windows,Linux 和 Mac 操作系统及对应的32位与64位的原创 2016-08-17 23:36:20 · 407 阅读 · 0 评论