LeetCode
Taohongfei_huster
这个作者很懒,什么都没留下…
展开
-
36. Valid Sudoku
题目链接:https://leetcode.com/problems/valid-sudoku/description/该题的思路比较明确,按照数独的要求判断即可:1.判断每一行没有重复的元素;2.判断每一列没有重复的元素;3.判断每一个9宫格没有重复的元素。关于元素个数的统计,一是可以采用count数组,二是用hashmap。代码如下:class Solution {...原创 2018-07-17 21:33:33 · 130 阅读 · 0 评论 -
79.Word Search&&212.Word Search||
class Solution { boolean[][] visited; public boolean exist(char[][] board, String word) { visited = new boolean[board.length][board[0].length]; for (int i = 0; i &...原创 2018-11-05 17:00:06 · 154 阅读 · 0 评论 -
211.Add and Search Word
该题有两种思路:one:利用Trie树实现:class WordDictionary { private class Trie { public boolean isWord; public Trie[] children; public Trie() { this.isWord = false...原创 2018-11-05 16:09:36 · 144 阅读 · 0 评论 -
179. Largest Number
题目如下:题目说的是用数组中的元素拼接成一个新的数,求这个数的最大值。考虑最简单的情况:数组中的数都是一位数,如nums[1,5,8],要拼接出一个尽可能大的数,首先对其进行排序,为8,5,1,然后将其拼接起来,即为所求(851)。同理,这道题也可以用排序解决,只不过要重新定义一种排序的规则。排序的规则定义了如何判断两个数的大小(传统意义上,从高位开始依次比较),对于该题,排序规则...原创 2018-09-15 21:28:10 · 113 阅读 · 0 评论 -
454. 4Sum II
这道题让我五味杂陈(手动哭笑)。果然,求组合数和求具体的组合情况的思路还是很不一样的。class Solution { public int fourSumCount(int[] A, int[] B, int[] C, int[] D) { // K: Sum, V: freq Map<Integer, Integer> map =...原创 2018-09-28 19:07:50 · 119 阅读 · 0 评论 -
169. Majority Element&&229. Majority Element II
读题很重要!// Sortingpublic int majorityElement1(int[] nums) { Arrays.sort(nums); return nums[nums.length/2];}// Hashtable public int majorityElement2(int[] nums) { Map<Integer, In...原创 2018-10-04 11:53:36 · 209 阅读 · 0 评论 -
121.Best Time to Buy and Sell Stock&&122&&123&&188
只能进行一次交易,当进行到第i天时,该天进行交易的话,最大利润为nums[i]-min{nums[j]},其中0<=j<=i-1.程序如下:class Solution { public int maxProfit(int[] prices) { if(prices.length == 0) return 0; int...原创 2018-09-17 18:42:51 · 114 阅读 · 0 评论 -
53. Maximum Subarray
下面介绍动态规划的做法,复杂度为 O(n)。 步骤 1:令状态 dp[i] 表示以 A[i] 作为末尾的连续序列的最大和(这里是说 A[i] 必须作为连续序列的末尾)。 步骤 2:做如下考虑:因为 dp[i] 要求是必须以 A[i] 结尾的连续序列,那么只有两种情况: 这个最大和的连续序列只有一个元素,即以 A[i] 开始,以 A[i] 结尾。 这个最大和的连续序列有...原创 2018-10-11 16:50:19 · 82 阅读 · 0 评论 -
349. Intersection of Two Arrays&&350. Intersection of Two Arrays II
用两个 hash sets(Time complexity: O(n))public class Solution { public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set = new HashSet<>(); Set<Intege...原创 2018-11-09 16:51:07 · 114 阅读 · 0 评论 -
198.House Robber&&213.House Robber&&337. House Robber III
利用动态规划,记dp[i]为走到第i间房屋时所抢的钱数的最大值,对于第i间房,有抢和不抢两种方案,取决于哪种选择获益最大,所以dp[i]=max{dp[i-1],dp[i-2]+nums[i]}.public class Solution { // O(n)空间的写法 public int rob1(int[] num) { if (num.length ...原创 2018-11-06 17:21:57 · 105 阅读 · 0 评论 -
208.Implement Trie(Prefix Tree)
Trie树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。 典型应用是 1. 用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 2. 用于前缀匹配,比如我们在搜索引擎中输入待搜索的字词时,搜索引擎会给予提示有哪些前缀。 它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。缺点就是空间开销大。前缀树 有如下特点: ...原创 2018-10-24 17:14:07 · 189 阅读 · 0 评论 -
226.Invert Binary Tree
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { p...原创 2018-10-24 16:57:58 · 89 阅读 · 0 评论 -
5.Longest Palindrome Substring
中心扩展法,依次遍历每个字符。class Solution {// // 思路1: DP。这种思路就是尝试所有可能的palin的长度, [0, len], 遍历左右的[i,j]组合,找出其中最长的回文串。// public String longestPalindrome(String s) { // // corner...原创 2018-10-25 17:12:01 · 165 阅读 · 0 评论 -
234.Palindrome Linked List
直观解决方法的空间复杂度为o(n),判断回文数通常是从两端往中间进行比较。考虑到链表特性及对时间,空间复杂度的要求,有两种思路:一、将链表一分为二,后半部分翻转,然后依次比较每个元素是否相等。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListN...原创 2018-10-25 16:46:59 · 190 阅读 · 0 评论 -
209.Minimum Size Sbuarray Sum
用滑动窗口法,维护两个变量left,right,当它们之间的数组和sum>=s时,逐步将left往右移,在保证sum>=s时,更新sum和len。当sum<s时,将right往右移,直到sum>=s时,重复刚刚的步骤。class Solution { public int minSubArrayLen(int s, int[] nums) { ...原创 2018-10-25 15:18:03 · 124 阅读 · 2 评论 -
37. Sudoku Solver
题目链接如下:https://leetcode.com/problems/sudoku-solver/description/思路很明确,采用回溯法,判断某个数c是否可以放到位置(i,j)处(方法与前一题不同,更简单一点,当board[i][j]!='.'时,检查该处所处的行,列,九宫格是否有重复的数字c),可以放时令board[i][j]=c,然后处理下一个位置,直到排满为止。代码如下:...原创 2018-07-18 16:38:51 · 859 阅读 · 0 评论 -
224. Basic Calculator
class Solution { public int calculate(String s) { int len = s.length(), sign = 1, result = 0; Stack<Integer> stack = new Stack<Integer>(); for (int i = 0; i < len; i++) ...原创 2018-11-13 19:17:47 · 92 阅读 · 0 评论