- 博客(29)
- 收藏
- 关注
原创 142环形链表2
判断是否又环,并找到入口:在第一次相遇的位置,快指针比满指针多走了N圈,相对于从head点的位置,多走了一个环形圈长度的位移;从这里开始,一个从head出发,一个从此节点出发,每次都一步,直到相遇就是环的入口。public class Solution { public ListNode detectCycle( ListNode head ) { if( head ==...
2018-11-05 15:47:01
93
原创 两两翻转链表
如题翻转链表,1,2,3,4,5 -> 2,1,4,3,5代码如下,注意判断需要保存下下一个节点,以及pre,用来保存两两翻转后1指向4 public ListNode reverseDoubleList(ListNode head) { if (head == null || head.next == null) return head; ListNode p = ...
2018-03-04 14:13:18
809
原创 114二叉树展开为链表Flatten Binary Tree To LinkedList
刚好头条笔试的时候问到了,记录一下答案。二叉树的题一般用递归的思想做,递归中注意两点:1、注意返回的边界条件2、注意模块化的思想,从局部都一点入手处理,然后对把处理逻辑当做完成的部分来处理,不要越陷越深回到题目,这道题目的思路是把给定的二叉树按照先序遍历的顺序转换成链表,二叉树的每个节点right指向下一个节点。对某一个节点进行处理,然后递归处理左节点、右节点,之后当做...
2018-03-04 14:08:20
118
原创 034Search for a Range重复数字二分查找
给一个数组,包含了重复的数字,找出目标的左右下标,就是二分查找多加了个重复元素的条件,找到左右下标。 基本思路是,先二分查找,最后找到的话跳出,说明了找到了target,判断左右边界,接着用一个二分查找,注意这个二分查找的low、high改变条件与普通的不同,则可找到左右边界class Solution { public int[] searchRange(int[] num...
2018-02-09 14:59:59
241
原创 线程相关
CountDownLatch的用法:开一个线程可以等待其他所有线程完事之后再执行,注意等待的线程数目的大小示例代码如下:public class Solution { public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.
2018-02-05 11:25:29
140
原创 236LCA
求二叉树的最小公共祖先(lowest common ancestor),如果是BST比较简单,时间复杂度O(logN),如果是普通二叉树稍微复杂一些,时间复杂度O(N);代码如下public class Solution { /* * 如果是BST的情况 */ public static TreeNode getBSTLCA(TreeNode root, TreeNode p,
2018-02-01 11:36:19
133
原创 offer29数组中超过一半的数字 && 51数组中重复的数字
两道题有点像,就直接放在一起写了。第一题找出数组中超过一半的数字,可以用map存储,key是数字,value是次数,记录后遍历value即可,时间复杂度o(n),但是需要o(n)的的空间复杂度。记录数组出现次数times,一次遍历,如果相同则times++,如果不同则--,因为数字次数超过一半,所以最后times>1的数字肯定是要找的数字。时间复杂度为o(n),空间复杂度o(1) public s
2018-01-27 11:47:26
106
原创 offer08旋转数组的最小数字
找出旋转数组的最小数字,如题所示,与上个一题有些类似 但还是不完全一样,主要是跳出循环判断不一样,需要找到最小的数字,mid每次变的时候也在原位置,并非+-1,否则错过最小值。最后,注意{2,1,2,2,2}这种left,mid,right一样的情况,只能用顺序查找法了,代码如下public static int search(int[] array) { int left = 0, righ
2018-01-26 15:11:55
134
原创 033Searchr in Rotated Sorted Array
给一个旋转数组,找出要的数字。 是一个二分查找的变种,每次变换数组后有数组两种可能性,一种是array[mid]比array[left]大,另一种是比他小;如果大的话判断是否在左边,直接用二分法,如果不是接着循环判断;比他小的情况类似。注意点:边界值,array[mid]>=array[left]中的等号,另一个是target >= array[left]中的等号publ...
2018-01-24 16:19:13
180
原创 连续子数组的最大和
一个有N个元素的整型数组arr,有正有负,数组中连续一个或多个元素组成一个子数组,这个数组当然有很多子数组,求子数组之和的最大值。例如:[0,-2,3,5,-1,2]应返回9,[-9,-2,-3,-5,-3]应返回-2。F(i):以array[i]为末尾元素的子数组的和的最大值,子数组的元素的相对位置不变F(i)=max(F(i-1)+array[i] , array[i]
2018-01-11 14:47:53
126
原创 一些面试经验
最重要的事情应该是在一个适合思考的时刻,去思考和总结自己所经历的过去以及所掌握的技术,要总结到精髓,并且挖掘出自己至少一个亮点,在每次跳槽和面试的时候,不断总结自己,深度挖掘自己的亮点面试问题:项目经验,缓存,并发,JVM内存,算法题目内容是,写一个函数,它的作用是接受一个整数(假设为length),返回一个数组,数组的长度为length,数组中的内容为随机的0至(length-1)的值,并且不能...
2018-01-06 16:17:25
245
原创 141Linked List Cycle
题目就是判断是否有环,虽然不难但还是动手写一下吧。如果不要求额外空间的话,可以直接用set集合存储节点,判断是否有有重复,这样遍历一遍需要额外空间O(n);所以用快慢指针,快的总能套圈慢的,就是圈数多少的问题,注意边界条件!!public class Solution { public boolean hasCycle(ListNode head) { ...
2018-01-05 11:45:42
136
原创 046Permutations
数组的全排列开始定势思维了,按照subsets题目,在dfs参数中加了个下标index,其实不用,注意ArrayList在remove删除下标时是index不是元素,直接上代码class Solution { public static List<List<Integer>> ans = new ArrayList<>(); pub...
2018-01-05 11:15:36
146
原创 198House Robber
大意:给一个数组,相邻两个不能取,求取出的最大值。动态规划题目,先暴力递归,然后拿数组记录重复的,剪枝。自顶向下解法class Solution { public static int[] array = new int[100]; public int solve(int index, int[] nums) { if (index < 0 || nums == ...
2018-01-02 10:34:42
133
原创 051N-Queens
写到subsets,顺便回想了一下8皇后问题,写个答案记录一下吧每次从列开始遍历,1皇后放在第一行第一列,2皇后放在第二行第一列,是否ok?第二列是否ok?ok后进入下一行,3皇后放在第三行第一列是否ok?第二列?。。。全部放完之后回到1皇后第一行第二列.class Solution { public static List> ans = new ArrayList<>();
2017-12-28 11:59:42
163
原创 078Subsets
列出全排列,类似于dfs,用一个递归实现即可,返回值比较麻烦,就简化了用一个全局变量记录了答案,代码如下:class Solution {public static boolean v[] = new boolean[100]; public static List> ans = new ArrayList<>(); public void dfs(int index, int[] n
2017-12-26 15:40:42
110
原创 104Maximum Depth of Binary Tree
递归的话没什么好讲的class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } return Math.max(maxDepth(root.left),maxDepth(root.right))+1; }}非递归可以用层序遍历
2017-12-26 15:04:06
93
原创 jQuery学习
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> Insert title here $(function(){ alert($("#button").val()); $("#button").click(function(){
2017-12-24 17:33:21
95
原创 offer37两个链表的第一个公共节点
输入两个链表l1和l2,找出它们的第一个公共节点。思路:单链表如果有公共节点,肯定为Y型,从末尾扫描到头可找出第一个不相同的即可,l1和l2压栈,从尾开始弹出,第一个不相同的即为答案,时间复杂度O(m+n),需要额外空间复杂度O(m+n);若知道两个链表长度,长的先走几步,然后两链表同步向前,找出第一个相同的节点,这种不需要额外空间,时间复杂度O(m+n),代码如下public
2017-12-21 19:33:49
145
原创 035Search Insert Position
Input: [1,3,5,6], 5Output: 2在一个数组中插入一个数字,输出下表,一个二分查找算法,时间复杂度O(logN)class Solution { public int searchInsert(int[] nums, int target) { int low = 0; int high = nums.length - 1; int
2017-12-21 11:37:32
95
原创 021Merge Two Sorted Lists
合并两个有序链表,链表问题建立一个伪头结点很好使,当前指针从p从p.next开始,返回head.next代码如下:ListNode head = new ListNode(0); ListNode p = head; while (l1 != null || l2 != null) { if (l1 == null) { p.next = l2; bre
2017-12-20 17:28:10
118
原创 020Valid Parentheses
一道栈的练习题,遇到左边的括号压栈,否则弹出栈中元素,如果匹配,且遍历完栈中为空 说明正确,代码如下class Solution { public boolean isValid(String s) { Stack stack = new Stack(); if (s == null) { return false; } for (int i = 0;
2017-12-20 17:11:39
119
原创 019Remove Nth Node From End of List
删除倒数第N个链表节点,快慢指针,快的先走几步,然后慢点再走,如果是第一个需要特殊处理一下,其他情况直接返回即可,还需要提高解题速度啊....class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode pAhead = head; ListNode pBehind
2017-12-17 16:07:05
136
原创 Java线程池
JAVA提供四种线程池:1、newCachedThreadPool创建一个可缓存线程池,线程池长度超出,则灵活回收空闲线程,若无空闲则新建线程。每次execute时,task还没有执行完(sleep500),因此会开启新的线程;如果修改sleep(0),则当需要执行第二个任务时execute第一个任务已经执行完,则会复用执行第一个任务的线程,而不创建新的线程,线程池大小不限制。public
2017-12-16 14:24:37
116
原创 003Longest Substring Without Repeating Characters
Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.求最长子字符串的长度,注意是连续的子字符串。双指针维护一个动态窗口,遍历一个长度即可,时间复杂度O(n),
2017-12-13 16:38:52
96
原创 002Add-Two-Numbers
给两个链表:Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8第一道链表题,顺便复习一下链表知识,链表题目一般加一个表头dummyhead,和一个当前节点p 经验总结:想好思路在动手,没思路的话就按最简单的方法边想边写,否则会浪费很多时间debug。。上代码:
2017-12-12 00:01:29
172
原创 001Two-Sum
把以前在GitHub上记录的LeetCode全部挪到这里来,发现这里还是比较方便。Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].给一个数组找出两个书之和是target数。 可以暴力解法nxn,但肯定超时。class Solution {
2017-12-11 23:03:00
117
原创 电商项目实战
1、数据表结构设计不建议使用外键;唯一索引,单索引,组合索引,时间戳,create_time,update_time;nginx安装:80端口被pid为4的system进程占用,解决方法:百度经验,改了注册表的一个设置。正向代理代理的对象时客户端,隐藏真实客户端,反向代理的对象是服务端,隐藏真实服务端properties读取文件时,在同一个src目录下String filename = "mmal...
2017-11-30 16:51:44
942
原创 SpringMVC+Mybatis项目
今天搞SpringMVC+Mybatis整合项目,dataSource注入死活搞不定,后来搜了很久发现jar包没引,后来引入之后发现没引对。。以后出现问题先检查代码,如果没问题,再检查是否jar引入对了。commons-pool-1.6.jar;commons-collections-3.2.1.jar;commons-logging-1.2.jarcontroller校验客户端提交数据,serv...
2017-11-28 10:17:28
234
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人