自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ** Minimum Moves to Equal Array Elements

public class Solution { public int minMoves(int[] nums) { int n = nums.length; if ( n <= 1 ) return 0; int sum = 0; int max = Integer.MIN_VALUE;

2017-01-12 12:32:15 223

原创 *LeetCode-Flatten 2D Vector

首先是两种iterator的《》里面写什么 第一次写的时候多写了一层    Iterator col;    Iterator > row;才是对的然后注意可能有一些list是空的 要在hasnext就挪到下一个不空的地方去然后在next里面call hasnextpublic class Vector2D { Iterator col; Itera

2015-11-26 03:44:07 492

原创 **LeetCode-Minimum Window Substring

这种题都是hashmap加two pointers思想 但是移动start pointer的rules不一样 以及判断是否包含了所有的字母找到了答案的方法也不太一样这个题也是先统计总共需要哪些字母 需要多少个 然后开始扫同样是要找到有效count等于需要的总count之后表示找到了答案 然后这个题的start指针记得要挪动到下一个valid字母处public class Solutio

2015-11-26 01:59:39 310

原创 **LeetCode-Substring with Concatenation of All Words

首先记录一个map 数字典里面的word 每个出现几遍, 然后对于string 扫3遍 (假如word length是3)每次有一个offset开始这样就能保证把每个情况错开的word都包含全判断是否涵盖了dict里面所有词并且使用频率也对 是通过另一个map的每个词个数不可以超dict的map 并且总count等于dict里面词的个数然后每次记录一个start 开始每个词假如另一个m

2015-11-25 07:39:10 344

原创 *LeetCode-Smallest Rectangle Enclosing Black Pixels

常规做法dfs bfs O(mn)bfs需要新建一个class存坐标 dfs不用存 更简便一点 记得每次访问过1后要给他设置成0public class Solution { int minX = Integer.MAX_VALUE, maxX = 0, minY = Integer.MAX_VALUE, maxY = 0; public int minArea(char[

2015-11-25 01:58:36 515

原创 *LeetCode-Meeting Rooms II

首先interval数组按照start 排序 然后建立一个以end排序的priority queue 这样每次按照start的先后顺序入队,入队之前要把所有在这个start之前都结束的会议poll出来每次更新room数量 public class Solution { public int minMeetingRooms(Interval[] intervals) {

2015-11-24 00:57:55 1244

原创 *LeetCode-Power of Two

首先除法的要注意corner case 0,1之类的然后就是另一个方法是数bit 1 的个数 2的power只能有一个1 public class Solution { public boolean isPowerOfTwo(int n) { return n>0 && Integer.bitCount(n) == 1; }}

2015-11-08 00:14:20 271

原创 *LeetCode-Permutation

两种思路 一种是从第一个数开始add 之后每个数add就是在上一条n个数中选一个位置insert 共n+1种这种就是浪费了一些小的list 因为下面要复制sublistpublic class Solution { public List> permute(int[] nums) { List> res = new ArrayList>(); hel

2015-11-07 01:12:14 305

原创 *LeetCode-Longest Increasing Subsequence

dp基本的dp o(n方)每次扫这个数字所有前面的有几个小于他的 然后更新这个位置为止的longest 这个数字完成之后 就更新global maxpublic class Solution { public int lengthOfLIS(int[] nums) { if ( nums == null || nums.length == 0 )

2015-11-05 04:24:39 237

原创 *LeetCode-Find Minimum in Rotated Sorted Array

可以o(n)扫一遍 找到不比前一个大的数字 lgn的方法是 binary search 通过判断head tail mid的大小关系判断pivot在哪一段public class Solution { public int findMin(int[] nums) { int head = 0; int tail = nums.length - 1;

2015-11-02 01:15:05 209

原创 **LeetCode-Divide Two Integers

首先不看那些corner case的话 不管正负号思想就是每次给除数乘以二 然后和被除数比较 找到最大的一个比被除数小的倍数 比如15/3 那最大的可以从15里面减去的就是12 是3的四倍乘以二通过左移一位来实现 这样的话为了记录那个最大数字是除数的几倍 同时用一个1来同时左移记录 发现是四倍 然后就从被除数中减去这个最大倍数然后一直循环到即使1倍也不能减去了 就累计出来了得数但是

2015-11-02 01:11:46 201

原创 *LeetCode-Convert Sorted Array to Binary Search Tree

直观的就是recursive方法 每次取中间的数字做root 左右分别做一开始用的方法用本函数递归了 就不能传index 只能传subarray 就废了空间因为要copy后来看了一眼去年写的 应该写一个传本array和start end的helper函数来递归public class Solution { public TreeNode sortedArrayToBST(int

2015-11-01 04:15:49 228

原创 *LeetCode-Walls and Gates

看到这个题好想哭啊 fb面的这个我是想到了count island那个题 用了dfs 一开始应该是死循环了? 溢出 然后看答案是假如这个点没有更新 那从它开始的四周也就没必要再更新了 没想清楚 这样的话感觉是mn的时间复杂度public class Solution { public void wallsAndGates(int[][] rooms) { if (

2015-10-28 12:00:44 355

原创 *LeetCode-House Robber II

house robber 1是dp 要记得怎么做!第二个变成了circle 需要考虑首尾相接可以选一个房子让他不被rob 然后就break成一个直线 就能用1的方法算出一个max然后让他旁边的房子不被rob 算出另一个max 两个比较就好了 public class Solution { public int rob(int[] nums) { if ( n

2015-10-27 05:23:23 295

原创 *LeetCode-Number of Digit One

每次累加一个位置上出现的1 循环每次除数成以10每个位置上的1要看这一位这一位前面的数字 就是比如这一位是百 就要看有多少个百 当百位是0和1的时候要特殊对待 其中1又要特殊对待public class Solution { public int countDigitOne(int n) { int ones = 0; for ( long m

2015-10-27 04:49:43 284

原创 LeetCode-Word Pattern

才发现hashmap还有一个contains value function 但是由于他是把所有value都扫一遍 还不如存两个hashmap呢public class Solution { public boolean wordPattern(String pattern, String str) { HashMap map = new HashMap ();

2015-10-26 09:40:53 265

原创 *LeetCode-4Sum

o(n^3)固定一个数字 然后就变成3sum 再固定一个就是2sum但是注意处理duplicate 就是四个数字都要避免dup 处理了四个地方public class Solution { public List> fourSum(int[] nums, int target) { List> res = new ArrayList> (); i

2015-10-26 07:55:19 311

原创 *LeetCode-Nim Game

所有扫一遍的都超时了什么鬼Theorem: The first one who got the number that is multiple of 4 (i.e. n % 4 == 0) will lost, otherwise he/she will win.Proof:the base case: when n = 4, as suggested by the hin

2015-10-24 05:50:35 271

原创 **LeetCode-Regular Expression Matching

太麻烦了!!!recursive的方法是围绕 p第二位是不是*来分的首先要判断p是否为空 然后return slen == 0注意不能反过来 假如s是空 然而p不是空 也是有可能的!假如是*那么分几种可能的情况 其中要注意的是当 s的第一位和p的第二位相匹配了 不要就把第一位以及*扔掉 仍然留着和后面匹配 因为aa 和 a*的情况 第二个a还需要*public class

2015-10-23 09:02:51 306

原创 **LeetCode-Maximum Gap

bucket sort n个数的话 用n个bucket 这样可能每个bucket正好一个数字 或者有的bucket是空着的 这样的话就可以不管bucket内部的gap了 1.假如有至少一个是空的 那在这个空的两边的bucket之间一定会形成max gap 2.假如每个正好一个数字 那么每个数字间的gap实际就是每个bucket之间的gapbucket size 就是(max

2015-10-23 04:31:30 306

原创 *LeetCode-Maximal Rectangle

DP!!!!!!分别用和宽度相等的三个数组 记录每一行这个位置所处的字符所在的rect的左右边界和高度left(i,j) = max(left(i-1,j), curleft), curleft can be determined from the current rowright(i,j) = min(right(i-1,j), curright), curright can b

2015-10-23 02:56:17 228

原创 *LeetCode-Reverse Words in a String II

首先把整个string reverse 然后每个词再reverse或者先每个词reverse 再整个reverse 注意最后一个词要记得reverse 这也是只有一个词的coner case的情况public class Solution { public void reverseWords(char[] s) { reverse( s, 0, s.length -

2015-10-22 09:08:13 290

原创 **LeetCode-Inorder Successor in BST

简直想不清楚!!!iterative: TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { TreeNode* candidate = NULL; while (root) root = (root->val > p->val) ? (candidate = root)->left : root

2015-10-22 08:23:07 274

原创 *LeetCode-Find the Celebrity

两遍 第一遍找出一个candidate 就是假如a 认识 b,b就是candidate,a 肯定不是, 每次把一个人和candidate比较 然后根据情况更新candidate这样的话只能最后得到一个candidate 并且不会漏掉正确答案然后第二遍验证这个candidate到底是不是正确答案public class Solution extends Relation { pu

2015-10-22 05:32:18 308

原创 *LeetCode-Count Univalue Subtrees

想到了用递归判断子树中的count 并且记录目前位置所有数字是否unify 但是没有想好怎么存这些信息 怎么返回,count 可以作为static var 然后helper就返回boolean注意count更新的条件 返回true false的条件很难归置好 注意判断left right 是否为null返回false的条件就是首先 left right递归后都要是ture 同时left不是

2015-10-22 03:55:18 619

原创 *LeetCode-Verify Preorder Sequence in Binary Search Tree

build bst using traversal那些题还要再看一遍用一个stack 每次假如还在left subtree 即num 《 stack top 就push 假如大了 就一直pop知道不再大于 然后push进去 但是要记录pop出来的最后一个数字 就是已经遍历过的左子root 不能再有小于他的了 所以记录在一个int里面 每次数字都要和这个纪录比较 假如出现比他小的 就fals

2015-10-22 02:53:08 632

原创 LeetCode-Shortest Word Distance II

因为需要多次call 所以就存成hashmap 存position list关键是找min的时候 实际上就是给两个list 找其中数字最小difference 方法就是每次更新那个小的 让他变大 去靠近大的 ( 因为list是sorted 从小到大)移动数字比较小的那个的指针public class WordDistance { HashMap> map = new HashM

2015-10-22 02:26:20 525

原创 LeetCode-3Sum Smaller

每次外层循环固定住一个数字, 然后剩下两个使用two pointer方法 每次初始化成头和尾 然后根据大小挪动一次public class Solution { public int threeSumSmaller(int[] nums, int target) { if ( nums == null || nums.length < 3 ) r

2015-10-22 01:43:17 663

原创 LeetCode-Binary Tree Upside Down

right child is leaf or null 保证了可以flip 就是说right node不可能再有child node每个node变成自己left child的 right node 自己的right child变成left child的left child递归 记得要先把左边先做一遍再移动root层的指针 同时root的left right point 要set null

2015-10-21 08:12:22 356

原创 *LeetCode-Zigzag Iterator

很笨的把两个list当数组用了 还把list复制了一遍list自己的iterator就可以了 而且有个很好的方法就是两个iterator每次swap就可以了 不用判断上个是输出的谁 public class ZigzagIterator { Iterator it1, it2; public ZigzagIterator(List v1, List v2) {

2015-10-21 07:35:39 333

原创 *LeetCode-Paint House

backstracking和dp的时间复杂度! 这个题backstracking超时了 dp就省时间一些每个格子是这个房子某种颜色 + min(截至上个房子另一种颜色,上一个房子第三种颜色)public class Solution { public int minCost(int[][] costs) { if ( costs == null || costs

2015-10-21 06:07:36 366

原创 *LeetCode-Flip Game II

backtracking 每次翻两个 然后向下递归 但是注意要取下次递归的返回值 因为假如对手一定输了 那么自己才一定赢了public class Solution { public boolean canWin(String s) { for ( int i = 0; i < s.length() - 1; i ++ ){ if ( s.cha

2015-10-18 07:52:23 745

原创 *LeetCode-Wiggle Sort

又是不知道怎么想规律是 每两个两个之间是小于 每对之间是大于 所以就根据 i 的奇偶性来判断两个连续数字见的关系 并且可以发现swap不会影响前面的正确 因为一对之间的关系应该是大于 假如是小于 需要swap 那么只会给前面换过去一个更大的 所以不用担心public class Solution { public void wiggleSort(int[] nums) {

2015-10-17 09:44:50 295

原创 *LeetCode-Unique Word Abbreviation

这个题也很简单 但是要想全可能存在的情况 所以假如只有hello 那hello是可以的 或者根本dict里面没有这个词 也没有这个词的abb也是可以的我用了map of string and int 来count有几个这样的abb 还用了一个set来记录dict里面的词 这样很浪费简便方法是用abb做key 但是value就用dict里面的词本身 假如第二次碰到这个abb了 那么把valu

2015-10-17 09:03:54 473

原创 **LeetCode-Paint Fence

不知道怎么做 思路是 每次考虑当前这个和前一根是否相同 假如想要相同 那就不可以用上一次是不同的那个次数 假如不同 就和上上根没有关系 只要跟上一根不同就行 就有k-1种 并且要乘以上一次(dif + same)最后return 也要把diff same相加public class Solution { public int numWays(int n, int k) {

2015-10-17 08:11:36 912

原创 LeetCode-Group Shifted Strings

不难 只是细节很多 map list等的细节还是需要背啊public class Solution { public List> groupStrings(String[] strings) { HashMap, List> map = new HashMap, List>(); for ( int i = 0; i < strings.length;

2015-10-17 07:46:16 752

原创 *LeetCode-Read N Characters Given Read4

题意太不清晰了!!实际上int read4(char[] buf); 是这样用的 自己建一个空的char buf 四位的 调用这个函数 就会从file读取4位存入这个buf所以这个function要每次讲buf4里面的贴到buf后面/* The read4 API is defined in the parent class Reader4. int read4(char[]

2015-10-17 07:18:59 270

原创 *LeetCode-Closest Binary Search Tree Value

啊 最直观的应该是iterative的 每次向下一层 都尝试更新min dist就好 不会因为选择了某一边而错过min dist的!因为假如root 比target大 那root右边那些更大的不可能比root更近!public class Solution { public int closestValue(TreeNode root, double target) {

2015-10-17 06:34:16 255

原创 *LeetCode-Strobogrammatic Number

这有一个好厉害的方法。。。。public boolean isStrobogrammatic(String num) { for (int i=0, j=num.length()-1; i <= j; i++, j--) if (!"00 11 88 696".contains(num.charAt(i) + "" + num.charAt(j)))

2015-10-17 04:47:06 239

原创 易错

每次comparator都不记得写object的leixing Arrays.sort ( intervals, new Comparator (){            public int compare ( Interval in1, Interval in2 ){                return in1.start - in2.start;

2015-10-17 04:04:10 371

空空如也

空空如也

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

TA关注的人

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