
Java
Herbzhou
立志成为好的博主,坚持博客
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
154. 寻找旋转排序数组中的最小值 II-------------为啥用右边界而不用左边界
我花了挺长时间用左边界来做,最后发现总是有几个测试用例过不了,刚好评论里也有关于这个点困惑,我就从理论上思考了这个问题。当然,这里可以引申成寻找最大值,那么思考一下分别用左右边界做判断的写法。这里用左边界更好,但是右边界也可以做。右边界的话可以考虑依然使用原来的方法,只需要最后返回nums[(left-1+nums.length)%nums.length] ,因为有可能最小值是第一个。-----其实提一下,这个用到了求出来的最小值的特性,该最小值是最左边的最小值,所以最小值的左边或者数组最后..原创 2020-07-06 13:47:30 · 245 阅读 · 0 评论 -
合并区间
3板斧先排序:根据左边界排序,相等的话再排右边界。前后两个区间,一共3种情况:原创 2020-07-04 22:12:00 · 194 阅读 · 0 评论 -
java.lang.IllegalArgumentException: Comparison method violates its general contract!
比较方法需要有返回值为0:比如(left,right)->left<right?-1:1;改成 (left,right)->left-right.原创 2020-07-04 19:00:21 · 278 阅读 · 0 评论 -
泛型的几个问题
虽然parent和son是继承关系,但是,方法中传参数是不能用List<son>来作为形参是List<parent>的。原创 2020-06-29 16:41:02 · 149 阅读 · 0 评论 -
关于接口和抽象类
关于选择接口还是抽象类的选择:https://www.ibm.com/developerworks/cn/java/l-javainterface-abstract/接口和抽象类的区别:1. 继承上:一个类可继承多个接口,一个类2. 成员变量:接口的成员变量默认是public final static的,而抽象类则和普通类没有区别3. 成员方法上:属性上,接口的方法都是public abstract的,而抽象类则和普通类没有区别。4. 接口能继承接口,但不能继承类,抽象类可以实现接口.原创 2020-06-29 11:50:51 · 156 阅读 · 0 评论 -
leetcode115 不同的子序列:谈dp问题的初始化
动态规划题目,初始化呢是个技巧活,把问题稍微转化,可以使得代码变得简洁。这里的dp方程即:如果i,j从0开始免不了要多加几个判断。这里试想,如果我们在s,t这两个字符串最前面加上一个相同的字符,而且该字符不与任何一个在t中存在的字符相同。那么最后的答案相同吗,答案是相同的。(这里虽然一笔带过但却是最值得细细思考的)又盗图了。。当然我觉得把首个字符替换成$符号理解起来更好。把第一个字符$当作一个有效字符来看这个问题,一切都顺理成章了。...原创 2020-06-26 13:36:13 · 186 阅读 · 0 评论 -
Arrays.asList()方法的坑
在全排列中,可以使用一个数组重复使用,这样不用一个list反复增减最后一个节点。但是答案是需要转成list的,于是就出错了List<List<Integer>>res;int[]path;res.add(Arrays.asList(path)) //注意Arrays.asList返回的是tm的Arrays里的内部类,不是我们常用的那个。。。但是两个实现了同样的抽象类。这里是用错了,Arrays.asList(1,2,3)返回的值是可以被res.add()的。而原创 2020-06-24 15:31:30 · 267 阅读 · 0 评论 -
leetcode 4数之和
关键词:去重,双指针。这题的题解在leetcode很多,这里并不赘述,只是证明下为什么那样可以去重:也就是为什么要很多个类似的这一步;首先,从语义上讨论,我们比较一个数和它之前的数是不是相同,那么就遍历数组而言,第一个数是没有前一个数的for(int i=0;i<nums.length;i++){ if(nums[i]==nums[i-1] //很明显,从语义上就不对,我们第一个元素是没有上一个元素的。 System.out.println(i);.原创 2020-06-23 12:25:13 · 174 阅读 · 0 评论 -
java string缓存池
都说string name="zlz"是创建了两个对象,一个是缓存池里的,一个是堆里的,怎么看出来啊?直接用反射就得了呗。 public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { String name ="zlz"; String name2 = new String("zlz"); Field field = S原创 2020-06-22 20:24:02 · 270 阅读 · 0 评论 -
idea,maven下载失败 could not transfer artifact org.apache.maven.plugins:maven-javadoc-plugin:pom
使用idea的童鞋可以在 idea安装目录下的bin目录下的idea.exe.vmoptions文件的最后增加一行,修改一次就行。这里的问题是https的问题-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true...原创 2020-05-14 19:43:50 · 2147 阅读 · 0 评论 -
牛客网--字符串的排列
回溯法import java.util.*;public class Solution { public ArrayList<String> Permutation(String str) { ArrayList<String>res = new ArrayList<>(); char[]chars ...原创 2020-03-18 14:24:22 · 216 阅读 · 0 评论 -
剑指offer---二叉树中和为某一值的路径集合
import java.util.ArrayList;import java.util.Collections;/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { thi...原创 2020-03-18 00:35:10 · 132 阅读 · 0 评论 -
java---PriorityQueue
大家不要大顶堆小顶堆傻傻分不清,这里介绍一种非常好用的办法:(left,right)->left<right?-1:1;首先你以后写比较的时候固定顺序left,right(方向是不是从左到右)-1,1(在一维的坐标里也是从左到右的)(-1<1)然后如果是left<right,表示从左到右,和-1<1方向一致,方向一致就是小顶堆------递减排序...原创 2020-03-10 13:47:47 · 116 阅读 · 0 评论 -
ArrayList,LinkedList
ArrayList用一个数字初始化后,size仍然为0,因为size表示里面实际存储的元素个数。原创 2020-02-25 12:40:19 · 103 阅读 · 0 评论 -
java中hashset真的不排序吗?
测试代码如下。。Set<Integer> hashSet=new HashSet<>();int []array = {1,10,11,34,5,7,2,9,4,6,6,3,6,3,34,54,23,53};for(int i=0;i<array.length;i++){ hashSet.add(array[i]); System.out....原创 2019-12-17 20:52:05 · 1140 阅读 · 0 评论 -
java函数中引用的理解
栈存放基本类型的变量、引用;堆存放对象。1. 首先我们要分清楚对象和引用的概念,这很重要;class Person{ String name; Person(){ } Person(String name){ this.name = name; } public static void changeName(Person person,String new...原创 2019-12-16 17:19:31 · 232 阅读 · 0 评论 -
java中函数值还是传引用?
java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题,首先我们必须认识到这个问题一般是相对函数而言的,也就是java中的方法参数,那么我们先来回顾一...转载 2019-12-16 15:30:11 · 144 阅读 · 0 评论 -
LRU用HashMap,双向链表的实现
leetcode的题解已经很完美了,这里记录下关于底下几个comments的问题:来源:力扣(LeetCode)这段代码很好。。import java.util.Hashtable;public class LRUCache { class DLinkedNode { int key; int value; DLinkedNode prev; ...原创 2019-12-10 19:41:57 · 430 阅读 · 0 评论 -
LinkedHashMap,accessOrder属性,removeEldestEntry方法
1. 对于accessOrder = false,表示根据插入的顺序来排序,就是先进先出。。对于accessOrder = true,其实不能光说是根据访问顺序来排序,而是:首先根据访问顺序排序,在访问次数相同情况下,根据插入顺序排序。//accessOrder(访问顺序): true:访问顺序,false:插入顺序//(默认构造函数中该参数默认为fasle)lhm = ...原创 2019-12-10 17:22:26 · 684 阅读 · 1 评论 -
leetcode滑动窗口题集
滑动窗口是一类题目,虽然其中有的题目可以有其他的或者更简单的解法,但是作为一个通用解法,我们在有限的时间里还是可以用的,具体在leetcode中有几题,有人已经总结了,而且说的很好leetcode滑动窗口解决我这几题都是用java来写的,在用java写的过程中呢,遇到一些问题,比如非常容易忽视的问题,Integer类型的,要用equals方法比较大小,否则当数值大于127的时候会出错。...原创 2019-12-10 14:02:09 · 263 阅读 · 0 评论 -
leetcode 76. Minimum Window Substring ,java版解答
Integer 在大于127 的时候 不从常量池里拿,是个对象,所以换成equals。。。就这个问题,花了我几个小时,最后评论区看到了该问题的解答。。。class Solution { public List<Integer> findAnagrams(String s, String p) { int left =0; int...原创 2019-12-09 19:26:49 · 124 阅读 · 0 评论 -
Pat 1155 Heap Paths
---------无论如何,一定要自己做出了,即使花3个小时做出来,也比3次看着别人的答案做出来要好。好久没刷pat和leetcode了。对于完全二叉树一定要掌握父节点和子节点的的序号关系。。然后dfs函数就是遍历路径。。最后注意判断堆的时候 利用了 A&&B,如果A条件符合,才会判断B,否则B是不判断的。剪枝,提前return,不然最后一个测试用例会超时。...原创 2019-12-08 23:11:58 · 155 阅读 · 0 评论 -
生产者与消费者,多线程
在实现一个的生产者和消费者(以下简称PC问题(producer-consumer))。遇到了一些问题;在实现中使用ArrayBlockingQueue,这是一个有最大容量的阻塞队列,在队列中添加元素有3种方式,我想使用put方法,这样不用判断是否队列已经满了,同样取元素使用take,不用判断队列是否为空。public class Producer implements Runnable ...原创 2019-12-07 16:16:01 · 97 阅读 · 0 评论 -
Delayed ,DelayedQueue的使用
因为并发看到了ScheduledThreadPoolExecutor的实现里面有Dealyed,所以就学习一下基本使用,网上资料也不少,Delayed这个接口继承了Comparable这个接口,所以实现这个接口现需要实现getDelay()和comapreTo方法;对于getDelay方法里面的参数我一开始比较疑惑。因为看到的别人博客的示例代码有的没用到这个参数,所以不知道这个参数是干啥的...原创 2019-12-06 17:27:34 · 514 阅读 · 0 评论 -
Thymeleaf在spring boot 2 recipe中的用法笔记
@GetMapping("/books.html")public String all(Model model) {model.addAttribute("books", bookService.findAll());return "books/list";}Finally, we return the name of the view to render books/list. ...原创 2019-11-30 15:40:21 · 112 阅读 · 0 评论 -
ConCurrentHashMap
1. 那么ConcurrentHashMap是如何判断在统计的时候容器是否发生了变化呢?使用modCount变量,在put、 remove 和clean方法里操作元素前都会将变量modCount进行加1,那么在统计size前后比较modCount是否发生变化,从而得知容器的大小是否发生变化。2. 关于该类中一些方法的测试:parallelismThreshold参数,如果map的siz...原创 2019-12-05 11:03:23 · 1257 阅读 · 0 评论 -
乐观锁
1. 很多场景中,都是需要先获取未修改前的值,比如银行卡买东西,至少先看下你的余额是否大于等于你此次购物的金额吧,再执行减的操作,而减去后的更新(CAS)时注意这是个原子操作,就是首先我要再次看看目前的金额是不是我刚刚读的金额,如果是,说明我的卡在这个时间段里没有进行其他操作,否则说明这段时间银行卡有变动,所以要回到最开始,直到修改时CAS中的compare满足条件了才行。2. 我们可以想象下...原创 2019-12-05 10:09:52 · 107 阅读 · 0 评论 -
java并发编程的艺术学习笔记----第四章
前面的理论部分有点太枯燥的,直接从第四章来看吧。1. 线程睡眠时间。TimeUnit.Seconds.sleep(10) //睡眠十秒2. 线程放弃获取的时间片,重新与其他线程竞争时间片Thread.yield()3. volatileevolatile实现原理是缓存锁。。能确保变量独一份。4. 任意一个对象都拥有自己的监视器,当这个对象由同步块或者这个对象...原创 2019-12-02 00:52:02 · 169 阅读 · 0 评论 -
JDK1.8的新特性
1. Optionaloptional的用法原创 2019-11-30 13:42:31 · 117 阅读 · 0 评论 -
java深浅拷贝
//序列化方法实现深拷贝 ByteArrayOutputStream bos=new ByteArrayOutputStream(); ObjectOutputStream oos=new ObjectOutputStream(bos); oos.writeObject(stu1); oos.flush(); ...原创 2020-06-29 11:05:42 · 140 阅读 · 0 评论 -
java.util.function总结
这里的函数式接口看似众多,确实很多hhh,但是很还是很有规律的。首先不得不提到的是Function<T,R>,另外的3个都可以看做从他衍生出来的.supplier<T>(不接收参数),consumer<T>(接收一个参数,无返回值),Predicate<T>,(返回boolean类型)然后一方面是在输入参数上演化了,提出了BiFuncti...原创 2019-09-25 19:48:31 · 526 阅读 · 0 评论 -
java泛型
关于java泛型,Function和BiFunction是两个很好地源码可以看,在过程中想想为什么BiFunction中没有compose方法,可以自己尝试去添加compose方法然后发现问题。在BiFunction中存在3个泛型参数,分别是T,U,R(第1个参数,第二个参数,返回类型),因为apply方法限定了如此,如果BiFuncion中有compose方法,那么1种可能是Function...原创 2019-09-25 09:09:41 · 425 阅读 · 0 评论