![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 73
王子力
星星之火,可以燎原
展开
-
java代码的一些规范
abstract method必须以分号结尾,且不带花括号;局部变量前不能放置任何访问修饰符 (private,public,和protected)bstract的methods不能以private修饰instant variable有default valuefinal的instant variable没有default value,必须在constructor (构造器)结原创 2012-04-23 14:30:39 · 367 阅读 · 0 评论 -
hashset简介
http://www.java-samples.com/showtutorial.php?tutorialid=348原创 2012-04-24 14:41:37 · 318 阅读 · 0 评论 -
插入排序算法&二路归并排序算法java实现
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package sortalgos;import java.io.BufferedInputStream;import java.io.BufferedReader;import java.i原创 2012-04-17 19:56:34 · 976 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局转载 2012-04-17 20:01:38 · 265 阅读 · 0 评论 -
java collections和collection的区别
http://wenku.baidu.com/view/b03ca9d728ea81c758f578bf.html简单说,一个是接口,一个是不能实例化的工具类原创 2012-04-19 09:37:39 · 270 阅读 · 0 评论 -
java内部类要注意的几点
静态内部类可以有静态成员,而非静态内部类则不能有静态成员;静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量;非静态内部类的非静态成员可以访问外部类的非静态变量;(待补充)原创 2012-04-22 16:00:00 · 321 阅读 · 0 评论 -
抽象类和接口区别深入详解
http://dev.yesky.com/436/7581936.shtml原创 2012-04-22 19:51:29 · 265 阅读 · 0 评论 -
wait notify notifyall 线程同步方法简述
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状原创 2012-04-23 09:43:03 · 363 阅读 · 0 评论 -
HashMap源码分析
/* * %W% %E% * * Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util;import java.io.原创 2012-05-09 10:21:23 · 469 阅读 · 0 评论 -
JAVA MULTITHREADED socket server
import servers.MultiThreadedServer;public class Program { public static void main(String[] args){ MultiThreadedServer server = new MultiThreadedServer(9077); new Thread(server).start(); try原创 2013-07-07 22:35:38 · 739 阅读 · 0 评论 -
java socket读入未知大小inputstream的客户端
import java.io.BufferedOutputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.net.Socket;public class Client { public static void main(String[] argv) throws Excepti原创 2013-07-07 22:22:34 · 3636 阅读 · 0 评论 -
leetcode hard模式专杀之51. N-Queens
继续leetcode hard模式, 八皇后问题的一般版,这种举一反三的题目值得好好琢磨,典型的回溯法,思路就不多说了,上代码,注意一一些边界条件的细节:public class Solution { public List transfer(int[] q){ List result = new ArrayList<>(); for(int原创 2017-06-07 20:19:08 · 287 阅读 · 0 评论 -
leetcode hard模式专杀之37. Sudoku Solver
继续刷题leetcode之数独这题乍一看挺吓人的 ,不过正好前几个礼拜做过八皇后问题,对回溯法有一定的记忆和认知,然后还有的技巧是位运算,hashmap记录等等,尽可能地节省空间复杂度。思路如下,先遍历一遍二维数组,本次遍历是为了收集统计数据,哪些统计数据呢?有三个,第一,每一行还差哪些数字没填, 第二,每一列还有哪些数字没填,第三,每个block还有哪些数字没填,为了节省空间,那些数字没填就原创 2017-06-07 17:53:45 · 307 阅读 · 0 评论 -
leetcode hard模式专杀之57. Insert Interval
这题思路 不算难,但同样是要注意边界条件, high level的思路是如果新插入的interval没有任何overlap,那就直接插入,否则,就通过如下方式合并:删掉所有的有overlap的interval,再插入一个新的interval那么问题来了,如何确定哪些是overlap的interval, 新的interval又是从哪儿到哪儿?要回答这两个问题,通过两次循环遍历足矣,上代码:原创 2017-06-08 14:11:26 · 315 阅读 · 0 评论 -
leetcode hard模式专杀之52 N-Queens II
这道题我不清楚跟N-Queens的区别是什么,核心算法都是一样的,只是这道题是计数,前一道是计算具体的组合,组合都出来了,计数还会难吗?不bb,上代码:public class Solution { public int totalNQueens(int n) { Map result = new HashMap<>(); int[] q=new原创 2017-06-07 22:04:25 · 274 阅读 · 0 评论 -
leetcode hard模式专杀之76 Minimum Window Substring
继续刷leetcode hard模式 https://leetcode.com/problems/minimum-window-substring/#/description这题感觉算是hard模式中比较容易的 一题, 不过算法非常典型, 是一个举一反三的好例子, 很多看起来很难的题目都可以通过这题找到原始思路。按说找一个字符串窗口不是难事,但是要保持O(n)的时间复杂度,原创 2017-06-05 13:10:48 · 307 阅读 · 0 评论 -
leetcode hard模式专杀之25 Reverse Nodes in k-Group
这段时间出去面试发现自己做算法题的熟练度还是太不够,继续集训一下,专做leetcode的hard模式,这道题我估计如果在面试时碰到,八成要死,这种题属于逻辑想出来不算复杂,但是写出代码来坑巨多的题目,估计这也是这种题被放在hard模式的原因吧。面试的时候如果出这种题,未必是考你逻辑,而是考你思维严密度,这题的happy flow我很快就做出来了,但是真正通过leetcode OJ却是在原创 2017-06-04 11:58:29 · 398 阅读 · 0 评论 -
leetcode hard模式专杀之23 merge k sorted lists
这个题目思路不算很复杂,但是容易出错,leetcode把它算作hard模式的题目,我看在medium在hard之间,不过如果面试的时候碰到,也就坑死爹。思路如下:假设每个链表从小到大排列,头是最小值,则每次从所有链表头中找出最小值, 然后把它摘下来,放到结果链表中,从k个值中找到最小值,不是个难事,不过如果每次都去计算,哪怕用一次冒泡,算法复杂度也是够呛的,因为摘下来后最小原创 2017-06-03 16:51:34 · 324 阅读 · 0 评论 -
leetcode hard模式专杀之10Regular Expression Matching
leetcode原创 2017-06-02 19:41:36 · 243 阅读 · 0 评论 -
leetcode hard模式专杀之55. Jump Game
这道题其实是medium模式,不过因为他是Jump Game II的前提,所以也一并做了,思路倒是不负责,动态规划来做就好,不过这题让我提交了七八次才通过oj,前几次是超时,后几次修改是有些条件没考虑,所以是很值得仔细琢磨的一道题,思路是这样的,从0开始,想象可以往后染色,然后在染色范围内,继续往后染色,如果某次染色的最大index大于等于最后的index即length-1,则返回true,如果一原创 2017-06-09 11:54:41 · 232 阅读 · 0 评论 -
动态规划之 longest common substring最大公共子串
这题是经典的动态规划算法,有些帖子没说清楚,然后看了下wikipedia,基本上一张图能看懂递推关系,基于这张图的算法,自己写了一版:import java.util.Arrays;public class CommonSubstring { public static String commonSub(String st1, String st2){ i原创 2017-07-11 15:41:53 · 538 阅读 · 0 评论 -
leetcode动态规划专杀之53. Maximum Subarray
这一题是easy模式,但是我甚至觉得比某些hard模式都难,总之想法不是很直观,我没有很快做出来,却是能用动态规划来解决的,这种类型真的要多练练。没太多好解释的,上代码,只要对着代码和一个例子,一步步推敲一遍,相信很容易看懂public class Solution { public int maxSubArray(int[] nums) { if(nums==null原创 2017-07-01 21:16:21 · 232 阅读 · 0 评论 -
leetcode矩阵类题目专杀之54. Spiral Matrix
http://www.fengchang.cc/post/3原创 2017-07-02 08:15:33 · 203 阅读 · 0 评论 -
leetcode hard模式专杀之45. Jump Game II
这道题跟其父题Jump Game都属于实现出来不难,但是通过OJ不容易的题目,反正我是这样感觉的,因为第一版我很快都写出来了,但是通过OJ却弄了七八次,蛋疼无比,不过总算是没有看答案,坚持自己写出来了,能仔细琢磨总结其经验,也不枉花了这么多时间。原本以为用其父题目稍微改改代码就能完成,后来发现不是这样,时间复杂度完全通不过,于是苦苦琢磨其他方式。最后思路大概是这样的,从第一个开始通过i+nums[原创 2017-06-10 21:47:40 · 217 阅读 · 0 评论 -
leetcode hard模式专杀之99. Recover Binary Search Tree
这题的思路我还是很快想出来了,奈何二叉树的数据结构和遍历模式不太敏感,代码迟迟没写出来,看来二叉树类的题目需要专项训练一下,补补,下一篇博客我会把二叉树的几种常见算法总结一下。说思路吧,其实关键就是找到两个交换过的位置就行了,接下来做个交换就行,BST本身如果把它平展开来,就是一个排序序列,例如1,2,3,4,5,6,7,那么这样一个序列假如随机交换两个数会发生什么呢?例如变成1,5,原创 2017-06-11 11:24:28 · 235 阅读 · 0 评论 -
前序遍历二叉树(非递归)
前一篇做了leetcode一道二叉树的hard模式,感觉自己对二叉树的一些数据结构不太敏感,于是打算做个总结,把二叉树的常见遍历方式记录一下,从本篇开始,将按如下顺序实现:1.前序遍历二叉树(非递归)2.中序遍历二叉树(非递归)3.后续遍历二叉树(非递归)4.前序遍历二叉树(递归)5.中序遍历二叉树(递归)6.后续遍历二叉树(递归)本篇为1.前序遍历二叉树,上代原创 2017-06-11 11:50:01 · 1591 阅读 · 1 评论 -
接前-中序遍历二叉树(非递归)
import java.util.Stack;class Node { int data; Node left, right; Node(int item) { data = item; left = right = null; }}class BinaryTree { Node root; public vo原创 2017-06-11 12:30:18 · 200 阅读 · 0 评论 -
接前-后序遍历二叉树(非递归)
上代码:class Node { int data; Node left, right; Node(int item) { data = item; left = right = null; }}class BinaryTree { Node root; public List iterativePos原创 2017-06-11 19:35:09 · 187 阅读 · 0 评论 -
接前-递归遍历二叉树
太简单,略原创 2017-06-11 20:06:37 · 212 阅读 · 0 评论 -
动态规划之longest common subsequence最大公共子序列
这题相对于longest common substring而言,区别就子序列和子串, 串的话每个字母是要连续的,序列的话,不要求,用动态规划做,上代码:public class CommonSubseq { public static void main(String[] args){ String strA = "BDCABA"; String strB = "ABCBDA原创 2017-07-13 17:18:49 · 980 阅读 · 0 评论 -
leetcode hard模式专杀之295. Find Median from Data Stream
这道题没有独立做出来,而且乍一看,怎么觉得这题这么容易,想当然地以为插入的数据就是排好序的,被sample误导了,于是就各种不通过,这题与其说是考算法,不如说是考数据结构,直觉地想法是维护一个排序地数据结构,这个数据结构需要有如下特点:1. 排序2.插入效率高(因为插入频率高)3.读取效率高(因为要取中位数)所以,arraylist不行,linkedlist不行,那怎么破?原创 2017-07-13 18:38:54 · 213 阅读 · 0 评论 -
leetcode hard模式专杀之68. Text Justification
这道题又是属于思路不难,但是边界条件极难把握准确的,题目,是一道联系思考边界条件的难得好题,值得仔细琢磨。思路其实非常简单,遍历,计算该塞多少空格,拼字符串,加入list,说起来就这么简单,没有任何难想的地方,但是组织代码有一定的难度,估计这个就是这道题为hard模式的原因吧,不bb了,上代码:public class Solution { public List full原创 2017-06-11 22:25:00 · 240 阅读 · 0 评论 -
leetcode hard模式专杀之72. Edit Distance
这题是比较标准的动态规划吧,动态规划里不算难,关键找出递归表达式,上代码:public class Solution { public int minDistance(String word1, String word2) { // Start typing your C/C++ solution below // DO NOT write in原创 2017-06-13 20:17:06 · 208 阅读 · 0 评论 -
leetcode hard模式专杀之233. Number of Digit One
这道题思路很快就有了,但提交了七八次才通过,总结下来,是自己对数字计算可能还是不够敏感,导致边界条件总是考虑不周,不过总算独立完成了,足够犒赏自己一笔钱了,嘿嘿。思路如下:比如有一个数123, 可以这样计算,设定个位数为1,满足条件的其他位数上的组合有n0个,再假设十位数上的数字是1,满足条件的其他位数上的组合有n1个,再假设百位上的数字位1,满足条件的其他位数上的组合为n3,则最终的结果为n1+原创 2017-07-18 11:28:49 · 262 阅读 · 0 评论 -
分截排序之二分查找
假如有一个排好序的整型数组,例如「1,2,3,4,5,6,7,8,9」, 从某处截断,后面一段整体移动到左边一段的左边,例如变成「5,6,7,8,9,1,2,3,4」,这样处理后的数组成为分截排序数组,给定一个分截排序数组,如何做二分搜索?这道题理论上不难,曾经去携程面试的时候问到过,当时没怎么刷算法,答得有点慢,现在手头有几个offer了,索性总结一下:思路如下,第一步还是找到中原创 2017-07-18 15:19:46 · 253 阅读 · 0 评论 -
层次遍历二叉树
老生常谈了,笔试又碰到,索性总结一下:思路很简单,根入队,然后出队并访问,然后入队左子节点(如果不空的话),再入队右子节点(如果不空的话),循环往下,直到队列为空。import java.util.LinkedList;class TreeNode{ int val; TreeNode left; TreeNode right; public TreeN原创 2017-07-19 12:25:45 · 274 阅读 · 0 评论 -
二叉树层级遍历之每层最后一个值
原题是说站在二叉树的右侧,从根到叶能看到的节点,也就是说同层右边的节点能挡住同层左边的节点。这个问题,基于层级遍历二叉树的基础来做即可,用代理模式新建一个类别包装TreeNode节点,添加属性level,根为0,孩子节点level+1, 然后判断是不是该层最后一个节点,可能没有办法,只能通过下一个节点层级是否与前一次不同,这样每次遍历实际上要记录前一次的level和value,代码如下:原创 2017-07-19 14:42:04 · 1410 阅读 · 0 评论 -
leetcode hard模式专杀之135. Candy
这题大概思路出来大概十来分钟,不过做到通过oj却花了几个小时,主要是一些情况没有考虑完整,首先在纸上画一划,看看如果人去做这件事,会怎么做,画了几遍之后,可以得出一个大概都结论,例如ratings序列是[1,2,3,7,5,6,9,2,1],首先第一个位置的孩子得到1个糖果,rating值等于5的孩子得到1个糖果, 然后最后一个孩子得到一个糖果,然后其他位置的孩子,从这几个位置推导出来即可,那么两原创 2017-08-06 15:31:34 · 222 阅读 · 0 评论 -
csrf简述
网络安全中的常见问题之一,cross site request forgery(直译为:跨域请求伪造),这是个什么问题呢?网上扯的可以很多,但是其实可以用一个简单的例子说明白:比如你要操作一个网站背后的资源,我们一般是发个http post请求对吧?比如http://example.com/api/updatepassword, post方法, post body为newpassword: 1原创 2017-08-26 19:22:59 · 365 阅读 · 0 评论 -
leetcodehard 模式专杀之85. Maximal Rectangle
这道题没有自己想出来,参考了网上的思路,基本上就是分两部,把求最大面积全1矩阵的问题转化为84. Largest Rectangle in Histogram, 尼玛难怪这两题是相连的,而且两道都是hard模式,如果没做出来84直接做85,还真是有些坑爹呢,看来leetcode最好还是按顺序做比较好。至于84怎么做这个我下一期再出解释吧,咱这里就先假设已经有这么一个现成的算法解决了84。那么解决8原创 2017-09-17 22:49:12 · 227 阅读 · 0 评论