- 博客(20)
- 收藏
- 关注
原创 算法复杂度分析
设计一个算法,一定要考虑到它的复杂度(空间、时间),那么,接下来,我们一步步来学习怎样分析一个算法的复杂度。一、数据规模首先,我们要清楚设计这个算法是要处理什么规模的数据的,根据处理的数据的规模,从而设计出适合的算法。通常,如果要想在 1s 之内解决问题:O(n^2) 的算法可处理约 10^4 级别的数据O(n) 的算法可处理约 10^8 级别的数据O(nlogn) 的算...
2018-04-27 22:41:44 1026
原创 Mybatis generator 使用方法
为什么要使用 Mybatis generator?因为在使用 Mybatis 时需要书写大量的 Mapping 文件,而手动书写容易出错,因为配置它的 XML 文件是一个很繁琐的事情,所以 Mybatis 后来开发出了一个较简易的工具来帮助生成 Dao、Model、Mapping 等相关文件,我们自然要使用啦使用方法:下载相关 jar:MyBatis Generator Release...
2018-04-22 08:59:02 683
原创 Google Guava 的 Multimap 的使用
项目中使用到了这个类,在这里简单记录一下com.google.common.collect 这个包里封装了很多集合类,比如 Multimap,那么这个类和 Map 有什么区别呢?Guava 文档 Multimap (Guava: Google Core Libraries for Java 22.0 API) A collection that maps keys to value...
2018-04-21 22:13:29 1118
原创 一个时间复杂度问题
问题:有一个字符串数组,将数组中的每一个字符串按照字母序排序;之后再将整个字符串数组按照字典序排序。整个操作的时间复杂度是多少?分析:假设最长的字符串长度为 s (为什么要假设最长字符串呢?因为通常求的时间复杂度是上界,所以我们假象这个字符串数组中所有字符串的长度都是最长的 s ,这样计算得出来的时间复杂度就是上界,包含了最坏的情况);数组中有 n 个字符串我们将计算分为两部分...
2018-04-20 22:17:49 526
原创 关于 try 和 finally 中的 return
关于 try 和 finally 中的 return首先我们来看一段代码:public class Test { public static int inc() { int x = 1; try { return ++x; // 1* } catch (Exception e) { }...
2018-04-19 09:30:32 309
原创 Windows下使用curl访问url掉参数的问题
Windows下使用curl时,出现一个问题,就是使用curl访问url掉参数的问题,现已找到解决方案,需要记录一下。问题:在浏览器中直接在url后带参数传参是没有问题的http://localhost:8080/test/validate.json?id=1&msg=2但是用curl访问时curl http://localhost:8080/test/...
2018-04-17 11:06:28 2381
原创 浅谈 KMP 算法
面试官夺命三连KMP 是啥?KMP 能干啥?手写 KMP ? 在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个主文本字符串S内查找一个词W的出现位置。此算法通过运用对这个词在不匹配时本身就包含足够的信息来确定下一个匹配将在哪里开始的发现,从而避免重新检查先前匹配的字符。 这个算法是由高德纳(Donald Ervin Knuth)和...
2018-04-17 09:02:40 394
原创 剑指Offer-42. 连续子数组的最大和
题目描述输入一个整型数组,数组里有正也有负数。数组中的一个或多个连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路只要前面算的和为负数,就放弃这个结果但是剑指offer这个题,以及牛客上这个题给的测试用例应该是都没包含全负的情况的,这个需要注意一下,这种方法对于全负的输入得不到最大子序列和。或者是如果题意所说的子序列/子数组包括0,要是这样...
2018-04-11 09:29:30 138
原创 剑指Offer-25. 合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路要注意处理空链表,保证代码的鲁棒性想清楚合并的过程,依次比较两个链表的头结点,把小的放前面。/*public class ListNode { int val; ListNode next = null; ListNode(int val...
2018-04-11 09:28:59 148
原创 剑指Offer-24. 反转链表
题目描述反转链表思路和leetcode的206. Reverse Linked List一样迭代:记录当前结点的下一个结点反转指针继续下一个结点返回反转后的头结点/*public class ListNode { int val; ListNode next = null; ListNode(int val) { ...
2018-04-11 09:28:29 176
原创 剑指Offer-9. 用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路stack1用来存元素,stack2存从stack1中弹出的元素,这样再从stack2取时,顺序就相当于队列的先进先出。import java.util.Stack;public class Solution { Stack<Integer> stack1...
2018-04-11 09:27:57 118
原创 剑指Offer-9. 斐波那契数列
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 n<=39思路如果用递归做,思路很简单,但是效率太低,时间复杂度是以n的指数的方式递增的。递归是从上往下,可以考虑从下往上,从f(0)+f(1)开始计算,可以达到O(n)public class Solution { public int Fibonacci(int ...
2018-04-11 09:27:23 161
原创 剑指Offer-8. 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路显然出这个题的目的肯定不是让我们用遍历数组找到最小值这种O(n)的方法。我们需要找到旋转数...
2018-04-11 09:26:53 140
原创 剑指Offer-6. 从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。思路用栈(不会改变原链表的结构) 将结点放入栈从栈中取出,放到链表中返回链表/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* ...
2018-04-11 09:26:20 135
原创 剑指Offer-5. 替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路用StringBuilder重建一个替换后的字符串public class Solution { public String replaceSpace(StringBuffer str) { ...
2018-04-11 09:25:24 135
原创 剑指Offer-4. 二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:总是选取数组的右上角的元素,如果该元素比target大,就删掉这一列(因为列是递增顺序排列的);如果该元素比target小,就删掉这一行;否则,就找到target。这样逐步缩小查找范围,直到找到targe...
2018-04-11 09:24:46 119
原创 剑指Offer-3. 数组中重复的数字
题目描述在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是第一个重复的数字 2。思路将值为i的元素放到下标为i的数组位置上,如果有重复的元素,必将产生冲突,那么产...
2018-04-11 09:23:24 133
原创 程序的健壮性(以大数相乘为例)
以大数相乘为例,思考怎样写出一个健壮的程序大数相乘思路就是采用模拟手乘的方法,没有难度,本文重点不在于怎么写出大数相乘的算法。我是想通过写这么一个方法,告诉自己写程序时要保证程序的健壮性,包括代码的可维护性、易读性、对输入的合法性的判断、对边界的考虑等等。首先要考虑输入的合法性:正负数、空字符串、用户也可能输入“002321”这样的数字,或者输入非法字符以及包含字母的字符串。...
2018-04-09 17:20:08 769
原创 JCIP阅读笔记之线程安全性
本文是作者在阅读JCIP过程中的部分笔记和思考,纯手敲,如有误处,请指正,非常感谢~可能会有人对书中代码示例中的注解有疑问,这里说一下,JCIP中示例代码的注解都是自定义的,并非官方JDK的注解,因此如果想要在自己的代码中使用,需要添加依赖。移步:jcip.net一、什么是线程安全性?当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么这个类就是线程安全的。示例:一个无...
2018-04-06 21:43:39 994 2
原创 Java 创建二叉树
在leetcode做了那么多道树的题,却发现自己连创建二叉树都写不出来,绝望.jpg,点开leetcode的debug界面,看到人家写的创建二叉树的代码,简洁又优雅,学习 public static TreeNode stringToTreeNode(String input) { // 处理"[","]" input = input.trim();...
2018-04-04 10:27:39 1958
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人