自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 双指针应用 Q42. Trapping Rain Water

一道hard的题,这道题确实有些难度,参考了评论区的解法链接思路是建立左右两个指针,和两个遍历leftmax rightmax记录一侧的墙的高度,然后左右指针同时往中间走,具体走哪边取决于边的高度,每次走高度低的那一边,直到左右指针相遇。class Solution { public int trap(int[] height) { int left = 0; ...

2019-02-02 11:05:24 156

原创 哈希表应用 Q560. Subarray Sum Equals K

这道题跟325非常像,具体思路基本一致,不懂的话可以去看一下325的解法,唯一不同的是这次哈希表的value存储的是“和为key的子序列出现的次数”。这道题做的过程中遇到了一些小波折,我一开始的做法是先把哈希表建好,然后再做一个1到nums.length的循环遍历,这样做不仅速度慢而且是错误的,正确的做法是找解的同时建立哈希表,避免了i去匹配比他位置靠后的子序列的问题。class Soluti...

2019-02-02 02:00:36 122

原创 哈希表应用 Q325. Maximum Size Subarray Sum Equals k

这道题有O(n)的解法,应用了哈希表查找时间是O(1)的性质,大概思路是先建立一个sums[]数组,sums[i]就是nums[0] + nums[1] + … + nums[i],这道题直接在nums[]原地建立sums[]数组,方便快捷。然后做一个1到nums.length的循环,每次在哈希表中查找存不存在sums[i] - k的key,如果存在的话说明key相对的value 到 i 就是符...

2019-02-01 11:47:34 180

原创 双指针 Q350 Intersection of Two Arrays II

简单题,在while的条件那里犯糊涂了,用&&就可以,因为只要跑完一个队列就可以退出了,之前一直觉得应该把两个队列都跑完,所以用的 || ,结果越界问题一直解决不了,改成&& 就过了。class Solution { public int[] intersect(int[] nums1, int[] nums2) { if(nums1.le...

2019-01-26 00:26:57 132

原创 Q67 Add Binary

自己先写了一个二进制转换int的,写的时候就想到存在溢出的问题,测试的时候果然数一大就溢出了class Solution { public String addBinary(String a, String b) { int suma=0, sumb=0; for(int i=0; i < a.length();i++) { ...

2019-01-25 14:30:00 113

原创 Q283 Move Zeroes

先贴一个非常丑陋的写法,头痛医头,脚痛医脚,然后就会写出这种屎一样的代码。。。用step完全是因为用i计数会出问题这个算法是O(N^2)的复杂度。。。class Solution { public void moveZeroes(int[] nums) { int end = nums.length - 1; int step = 0; ...

2019-01-25 09:28:42 135

原创 Q15. 3sum 双指针应用

一道题目令人想入非非的题。。。解法参考了评论区的答案(基本就是抄过来的)先把输入数列排序,这样有两个好处:1.效率高:在进行2sum操作时一头一尾两个指针,2sum变成O(N)的复杂度。 2.解决了重复数字的问题排序后在数组中先跳出一个数字,然后在剩余数组中进行2sum操作,这个算法的时间复杂度是O(N^2),运行速度也非常快,比97%的解法快。class Solution { pu...

2019-01-22 08:15:16 97

原创 BFS应用:字典问题 Q127. Word Ladder

先贴一个超时的算法,因为这个解法一会就会被覆盖了:) 这个解法没有记录已经访问过的词组,所以问题规模一大马上就超时。class Solution { public int ladderLength(String beginWord, String endWord, List<String> wordList){ if(!wordList.contains(en...

2019-01-14 18:28:54 93

原创 倒置字符串 151. Reverse Words in a String

这道题比较麻烦的地方是需要用正则表达式,本题中用到了“ +”表示多个空格。这个解法效率很低但是很简单。public class Solution { public String reverseWords(String s) { if(s.length() == 0) return ""; String[] words = s.sp...

2019-01-12 17:44:06 98

原创 Q8 String to Integer

非常恶心的一道题,拿各种edge case恶心人,难怪大部分人都很讨厌这道题,我自己一开始写的解法非常难改(改了两个小时还是过不了),所以参考了一下评论区里的解法。class Solution { public int myAtoi(String str) { int i=0,sign=1,ret=0; if(str.length() == 0) retu...

2019-01-11 18:59:18 87

原创 Q1. Two sum

最近事有点多,加上在学DP所以没怎么写题,写个two sum凑凑数class Solution { public int[] twoSum(int[] nums, int target) { for(int i=0; i < nums.length;i++){ for(int j=i+1;j < nums.length;j++){ ...

2019-01-10 21:56:27 96

原创 深度优先应用 Q733. Flood Fill

花了两个小时读明白题,五分钟写代码class Solution { public int[][] floodFill(int[][] image, int sr, int sc, int newColor) { if(image[sr][sc] == newColor) return image; int color = imag...

2019-01-05 11:36:51 107

原创 递归解析字符串 Q394. Decode String

这道题看完了第一反应是用递归或者栈来做,第二反应是递归和栈是一回事。。。用递归写可读性高一些,所以就用递归做了。这道题我卡了半天,因为没想出来如何让字符串的指针“实时”向前走,我一开始是设置一个for循环,用charAt()遍历字符串,这样做会导致一个很麻烦的问题:’]’ 无法处理,’]‘标志一段字母结束,所以当读到’]‘时应该返回,这时会返回至上一层,蛋疼的问题出现了,上一层的指针这时也指向这...

2019-01-04 21:21:00 161

原创 用队列实现栈 Q225. Implement Stack using Queues

无聊题class MyStack { private ArrayDeque<Integer> queue1; private ArrayDeque<Integer> queue2; /** Initialize your data structure here. */ public MyStack() { queue1 =...

2019-01-04 13:23:09 68

原创 用栈实现队列 Q232 Implement Queue using Stacks

本来是很简单的一道题,但是写了半天,因为忘记了stack1.size()是会变的。。。需要取个临时变量。class MyQueue { ArrayDeque<Integer> stack1; ArrayDeque<Integer> stack2; /** Initialize your data structure here. */ pu...

2019-01-03 16:09:05 110

原创 二叉树中序遍历 Q94 Binary Tree Inorder Traversal

三分钟写好快乐一下/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution ...

2019-01-03 14:59:12 84

原创 用栈解决后缀表达式问题(逆波兰表达法)150. Evaluate Reverse Polish Notation

很有意思的一道题,用switch写出了非常简洁。今天才知道JAVA的Stack类非常老(JDK1.0就引入了)而且非常的慢,所以最好用ArrayDeque来代替,感谢StackOverFlow上各路大神解答我的问题。问题链接本题代码如下:class Solution { public int evalRPN(String[] tokens) { ArrayDeque...

2019-01-02 18:45:52 208

原创 栈应用:739. Daily Temperatures

并不难的一道题,主要思路就是遍历时将所有日期入栈,同时比较当前日期的温度是不是比栈里的日期所对应的温度高,如果是的话就计算出ret[]的结果。需要注意的是栈中的元素永远是从小到大(栈顶到栈底)的顺序排列的(如果栈顶的温度比当前温度底的话就出栈了),所有这个算法才成立。class Solution { public int[] dailyTemperatures(int[] T) { ...

2019-01-02 14:48:26 87

原创 用栈检查括号合法性 20. Valid Parentheses

简单题,吃饭前写着玩玩import java.util.*;class Solution { public boolean isValid(String s) { if(s.length() == 0) return true; boolean ret = true; int length = s.length()...

2019-01-01 18:53:07 255

原创 (最小)栈的实现 155. Min Stack

这道题很简单,没什么好说的,但是我还是要为这道题单开个文章,因为这道题大部分速度很快的解法都是错的。这是一个59ms的算法,看起来挺漂亮的对吧?class MinStack { int min = Integer.MAX_VALUE; Stack<Integer> s = new Stack<>(); public void push(in...

2019-01-01 10:37:15 367 2

原创 BFS处理图的连通性问题 200 Number of Islands

这道题非常简单,因为和上一个题的解法基本相同(286 Walls and gates),只需要稍微变动一下就可以了,大概思路就是遍历整个图找到值为1的陆地,然后从这个点出发做BFS,将走过的地方设置成2(其实可以直接写成0的,我也不知道我当时怎么想的),BFS后继续找下一个值为1的陆地,继续上述步骤。每次找到新的陆地时计数器加1,最后返回计数器的值即可。需要注意的是这道题的输入值是char,不要...

2018-12-28 12:27:54 241

原创 BFS迷宫寻路 286. Walls and Gates

先把标准答案粘过来:我参考了标准答案的两个方面:第一个是点的存储方式,我一开始是自己定义了一个Pair类,然后用这个Pair去计算,这样做很不好,写出来的代码非常难看,而且效率很低(new一个对象是很费时间的)明明一个简单的数组就可以存的东西,为什么去建立一个新的类?第二个是四个方向的处理方式,我之前也想到了应该用一个for-each循环去处理,但是一直没有想到具体应该怎么实现,我甚至已经...

2018-12-27 18:08:26 368 1

原创 移动加权平均算法实现 346. Moving Average from Data Stream

import java.util.*;class MovingAverage { private int maxSize; private int size; private Queue<Integer> data; /** Initialize your data structure here. */ public MovingAverage(int...

2018-12-27 11:15:25 878

原创 循环队列实现 622.Design Circular Queue

import java.util.*;class MyCircularQueue { public int[] data; private int p_start; private int p_tail; private int k; private int len; /** Initialize your data structure h...

2018-12-25 18:39:26 224

原创 贪心算法正确性证明

贪心算法正确性证明什么是贪心算法WKI定义:贪心算法(英语:greedy algorithm),又称贪婪算法,是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。比如在旅行推销员问题中,如果旅行员每次都选择最近的城市,那这就是一种贪心算法。用大白话说:我每一步都选择当下的最好选择,这样做下去我的最终结果就是最好的。贪心算法是一种漂亮的算法...

2018-12-08 00:15:04 5876

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除