LeetCode
文章平均质量分 56
gqk289
这个作者很懒,什么都没留下…
展开
-
Pascal's Triangle II LeetCode
public List getRow(int rowIndex) { List rlist = new ArrayList(); List temp = new ArrayList(); if(rowIndex==0){ rlist.add(1); return rlist; } r原创 2015-04-19 16:19:55 · 404 阅读 · 0 评论 -
Rotate Array LeetCode
public class Solution { public void rotate(int[] nums, int k) { k = k%nums.length; if(nums.length==1|k==0){ return; } swap(nums,0,nums.length-1); swap(nums,0,k原创 2015-04-12 22:53:38 · 349 阅读 · 0 评论 -
Min Stack LeetCode
本题中的min栈中的值一定是按大小顺序且按照插入先后顺序排列的,所以如果当前弹出的值不等于min栈最上方的值,则该值一定不是最小值原创 2015-04-14 09:50:27 · 368 阅读 · 0 评论 -
LeetCode Unique Paths
public int uniquePaths(int m, int n) { if(m==1||n==1)return 1; int[][] matrix = new int[m][n]; matrix[m-1][n-1] = 1; for(int i=m-1;i>0;i--){ for(int j=n-1;j>0;j--){原创 2015-04-21 10:30:20 · 377 阅读 · 0 评论 -
Minimum Depth of Binary Tree LeetCode
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution {原创 2015-05-12 09:38:05 · 384 阅读 · 0 评论 -
[LeetCode]Reverse Linked List
public ListNode reverseList(ListNode head) { if(head==null||head.next==null)return head; if(head.next.next==null){ ListNode temp; temp = head.next; head.next.next = head;原创 2015-08-07 19:57:53 · 270 阅读 · 0 评论 -
[LeetCode]Count Primes
题目链接https://leetcode.com/problems/count-primes/public class Solution { public int countPrimes(int n) { int count = 0; for(int i=2;i<=n;i++){ boolean isPrime = true; for(int j原创 2015-08-08 00:06:25 · 286 阅读 · 0 评论 -
[LeetCode]Single Number
本系列一共有三个题目,第一题最为简单,只需要掌握异或运算满足交换律即可。第二题需要构造一个32位数组,根据二进制的原理,每当某一位上1的数量满足3的倍数时就清零,直到最后找出只出现一次的数字转化为二进制数后各个位置上的1,然后转化成十进制即可。public class Solution { public static int singleNumber(int[] A) {原创 2015-08-22 12:07:43 · 654 阅读 · 0 评论 -
[LeetCode]Balanced Binary Tree
public boolean isBalanced(TreeNode root) { if(root==null)return true;// boolean result = false; if(Math.abs(depth(root.left)-depth(root.right))>1)return false; else return is原创 2015-08-10 13:19:50 · 303 阅读 · 0 评论 -
[LeetCode]Path Sum
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution {原创 2015-08-10 12:21:11 · 331 阅读 · 0 评论 -
[LeetCode]Linked List Cycle
此题一看就是two point的问题,这类问题肯定是一个先走一个后走,要么是按照倍速一快一慢,要么是一个先走多少步,再两者同时走(找公共子链的问题)。此题就是按照倍速,若有循环则快者必将追上慢者。代码如下:/** * Definition for singly-linked list. * class ListNode { * int val;原创 2015-08-29 18:45:55 · 269 阅读 · 0 评论 -
[LeetCode]Sliding Window Maximum
public class Solution { public int[] maxSlidingWindow(int[] nums, int k) { if(nums.length==0)return new int[0]; int[] result = new int[nums.length-k+1]; int max = getMax(nums,0,k-1);原创 2015-08-17 11:02:27 · 322 阅读 · 0 评论 -
[LeetCode]Palindrome Linked List
class Solution { public boolean isPalindrome(ListNode head) { if(head==null||head.next==null)return true; ListNode thead = head; ListNode mid = findMid(head); mid = rever原创 2015-08-04 18:18:25 · 371 阅读 · 0 评论 -
[LeetCode]N-Queens II
本题为非常典型的回溯问题,回溯问题的实质是从初始位置出发,层层推进问题,如果遇到到达某一位置时该位置不满足题设条件,则退回到上一层,在上一层中选择下一个位置继续进行试探。回溯问题相当于相对于枚举法进行了剪枝处理,一定程度上提高了效率。这道题我完全没有做出来,全部是通过别人的答案进行拼凑,但中间还是出现了问题。代码如下:public class Solution {原创 2015-09-02 12:12:16 · 370 阅读 · 0 评论 -
[LeetCode] Summary Ranges
public class Solution {public List summaryRanges(int[] nums) { int i=0; List result=new ArrayList(); while(i<nums.length){ String s=""; s+=nums[i]; if(i<nums.lengt原创 2015-08-06 01:11:22 · 354 阅读 · 0 评论 -
[LeetCode]Search a 2D Matrix II
本题有三种做法,从最开始我想到的就是相对最简单的分治法。从右下角开始向左上角移动,当该处数值小于target时,递归调用查找左下和右上两个子问题。在原理正确的情况下如果超时,一定要删除其中的打印啊!!!System.out占用非常多的时间,坑爹。时间复杂度的计算为T(n)=2*T(n/2)+c,算去吧。代码如下:public class Solution原创 2015-08-20 19:12:02 · 399 阅读 · 0 评论 -
[LeetCode]Premutations
public class Solution { public List> permute(int[] nums) { List numList = new LinkedList(); for(int i=0;i<nums.length;i++){ numList.add(nums[i]); } List原创 2016-01-15 16:37:26 · 308 阅读 · 0 评论 -
[LeetCode]Best Time to Buy and Sell Stock with Cooldown
其实遇到这种容易陷入到具体某一种细节情况的问题的时候,就要有意识,这个题很有可能是DP相关问题。类似的题目还包括编辑距离、最长公共子序列等。求解这类问题时(DP)就是两点:1、状态转移方程;2、Corner case只是在这道题中状态转移方程比较不容易看出。在你获取利润的时候一定是在卖出股票的时候(买入没有利润),那么本天结束时的利润只有两种状态,1、本天没有进行操作;原创 2016-01-15 16:51:59 · 385 阅读 · 0 评论 -
[LeetCode] Burst Balloons
public class Solution { // 从最后一个burst的入手,dp[i][j]为i与j之间所有均已经burst的话所得分数的max public int maxCoins(int[] iNums) { int[] nums = new int[iNums.length + 2]; int n = 1; // 将其中原创 2016-04-02 19:49:24 · 537 阅读 · 0 评论 -
[LeetCode]Largest Number
https://leetcode.com/problems/largest-number/核心是建Comparator的问题,两个数排序时比较办法是,将其组合,比较谁在前谁在后所得结果更大。s2.compareTo(s1)所得结果是降序,s1.compareTo(s2)所得结果是升序。public class Solution { public String l原创 2016-11-28 22:13:43 · 175 阅读 · 0 评论 -
[LeetCode]Add and Search Word - Data structure design
https://leetcode.com/problems/add-and-search-word-data-structure-design/Trie树要想到,另外就是细节char a = (char)(1 + 'b') 这里两个char相加减之后想要再得到char要强转一下。public class WordDictionary { TreeNode原创 2016-11-30 09:35:15 · 176 阅读 · 0 评论 -
[LeetCode]Max Sum of Rectangle No Larger Than K
public class Solution { public int maxSumSubmatrix(int[][] matrix, int k) { if (matrix == null || matrix[0].length == 0) return 0; int res = Integer.MIN_VALUE; for (int lef原创 2016-11-15 08:45:25 · 385 阅读 · 0 评论 -
[LeetCode]Recover Binary Search Tree
https://leetcode.com/problems/recover-binary-search-tree/最开始题目说的O(n)解法是中序遍历,把值放到一个数组里,把其中要调整的两个调整好,然后在中序遍历一次把数组里面的值按顺序赋到BST之中。本题两解。解法一:递归中序遍历,保存三个指针:两个是要被交换的节点first、second,一个是当前遍历到结点的前原创 2016-12-10 20:44:35 · 303 阅读 · 0 评论 -
[LeetCode]Can I Win
https://leetcode.com/problems/can-i-win/本题是一道比较巧妙的DP问题,用HashMap保存状态。一个玩家当前能否获胜取决于两点:1、当前剩余还能获取的元素;2、当前剩余的desired(剩余目标和)由于max范围在20以内,因此当前剩余元素的表示按位来做,map存的值就是在当前剩余元素的状态下获胜还是失败。要注意,一个玩家取了一个值之后再调用原创 2016-12-01 15:53:55 · 1248 阅读 · 0 评论 -
[LeetCode]Merge Intervals
https://leetcode.com/problems/merge-intervals/Collection也可以sort,然后遍历即可。/** * Definition for an interval. * public class Interval { * int start; * int end; * Interval() { s原创 2016-12-11 19:53:30 · 227 阅读 · 0 评论 -
[LeetCode]Word Ladder
https://leetcode.com/problems/word-ladder/开始以为是一个DFS问题,然后考虑建图。实际是BFS问题,并且搜索问题不一定需要建图!本题巧妙之处在于使用首尾两个set,同时始终保证BFS开始的Set是size较小的。维护一个visitedSet。遍历begSet,判断当前String变更一个位置之后是不是可以在endSet之中找到,如果可以,就返回结果原创 2016-12-01 21:27:57 · 389 阅读 · 0 评论 -
[LeetCode]Decode Ways
https://leetcode.com/problems/decode-ways/明显dp问题,开数组长度n+1,dp[n]=1,dp[n - 1]看是不是0来判断。剩下的部分就是巧用parseInt、substring,可有效减少代码量。难度不大。public class Solution { public int numDecodings(Stri原创 2016-12-01 22:10:22 · 147 阅读 · 0 评论 -
[LeetCode]Find All Numbers Disappeared in an Array
https://leetcode.com/problems/find-all-numbers-disappeared-in-an-array/染色法,遍历一遍将位于abs(nums[i])位置处的值置为负数。再遍历一次,值仍然为正的位置就是不存在的值。public class Solution { public List findDisappearedNumbe原创 2016-12-12 10:54:05 · 204 阅读 · 0 评论 -
[LeetCode]Surrounded Regions
https://leetcode.com/problems/surrounded-regions/解法一:深搜考虑一种特殊情况:OOOOOOOOOOXXXXXXXXXOOOOOOOOOOOOXXXXXXXXXOOOOOOOOOOXXXXXXXXXOOOOOOOOOOOOXXXXXXXXXOOOOOOOOOOXXXXXXXXXO 应该change "if(j原创 2016-12-02 20:22:28 · 2944 阅读 · 0 评论 -
[LeetCode]N-Queens
https://leetcode.com/problems/n-queens/回溯问题做出来不难,但是空间复杂度有优化空间,我的做法是O(n2),实际可以到O(n)最优解:保存三个cache数组,一个记录col已经被占用的位置,另外两个记录对角线被占用的位置。d1=rowCur+j d2=j-rowCur+n-1,d1、d2可以判断当前位置相对于对角线是否valid。p原创 2016-12-03 12:28:01 · 207 阅读 · 0 评论 -
[LeetCode]Two Sum II - Input array is sorted
https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/排序数组、求两者和。显然two pointer。public class Solution { public int[] twoSum(int[] numbers, int target) { int[] res = {Int原创 2016-12-12 11:04:01 · 168 阅读 · 0 评论 -
[LeetCode]Move Zeroes
https://leetcode.com/problems/move-zeroes/双指针,类似算法导论的快排。public class Solution { public void moveZeroes(int[] nums) { if (nums == null || nums.length <= 1) { retur原创 2016-12-12 11:08:12 · 164 阅读 · 0 评论 -
[LeetCode]238. Product of Array Except Self
https://leetcode.com/problems/product-of-array-except-self/两次遍历,第一次保存从左边开始到当前位置前一位的乘积。第二次遍历从右往左,把当前位置右侧的乘积乘上之前保存的值,就是product except selfpublic class Solution { public int[] productExce原创 2016-12-12 11:30:03 · 210 阅读 · 0 评论 -
[LeetCode]442. Find All Duplicates in an Array
https://leetcode.com/problems/find-all-duplicates-in-an-array/由于要不用额外空间,因此还是染色法。一次遍历,把对应位置染成负数,如果本身已经是负数,说明之前已经出现过一次了,然后就加到结果里。public class Solution { public List findDuplicates(int[]原创 2016-12-12 11:51:42 · 197 阅读 · 0 评论 -
[LeetCode]162. Find Peak Element
https://leetcode.com/problems/find-peak-element/找到数组中的一个位置nums[i] > nums[i + 1] && nums[i] > nums[i - 1]。二分查找,注意len=1以及首尾两个的边界情况。两解,递归非递归。解法一:非递归public class Solution { public int原创 2016-12-14 21:40:35 · 204 阅读 · 0 评论 -
[LeetCode]122. Best Time to Buy and Sell Stock II
https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/同一天先卖后买相当于不卖不买。public class Solution { public int maxProfit(int[] prices) { int res = 0; if (prices =原创 2016-12-12 15:16:52 · 151 阅读 · 0 评论 -
[LeetCode]Divide Two Integer
https://leetcode.com/problems/divide-two-integers/不能用乘除法就应该想到用位运算,移位除数,迫近被除数且比被除数小。然后用被除数减去这个迫近的数,再循环。其实两个数相除说白了就是找到多少个除数加起来正好是小于等于被除数的最大值。public class Solution { public int divide(int d原创 2016-12-03 20:54:12 · 459 阅读 · 0 评论 -
[LeetCode]169. Majority Element
https://leetcode.com/problems/majority-element/此题多垃圾解,最优解显然。另有一较有意思解法,位运算。供参考。最优解:public class Solution { public int majorityElement(int[] nums) { int count = 1; in原创 2016-12-12 15:45:10 · 232 阅读 · 0 评论 -
[LeetCode]268. Missing Number
https://leetcode.com/problems/missing-number/两解,1、求和;2、xor解法一:求和public class Solution { public int missingNumber(int[] nums) { int sum = 0; int n = nums.length; f原创 2016-12-12 16:01:19 · 150 阅读 · 0 评论 -
[LeetCode]287. Find the Duplicate Number
https://leetcode.com/problems/find-the-duplicate-number/解法一:二分查找。要找的数就在1~n里面,重复数字值小于等于mid的话,那么小于等于mid的数的总数一定大于mid,因而end左移;否则beg右移。public class Solution { public int findDuplicate(int[] n原创 2016-12-12 16:38:25 · 152 阅读 · 0 评论