
leetcode
mitsuhide1992
软件研发工程师
展开
-
LeetCode 313. Super Ugly Number
思路利用ugly,pointer,prime三个数组存储当前找到的所有ugly,同时存储下次可能是最小的数: 算法实现public int nthSuperUglyNumber(int n, int[] primes) { int[] pointer = new int[primes.length]; Arrays.fill(pointer, 0); int原创 2016-03-29 23:24:34 · 2726 阅读 · 1 评论 -
LeetCode 289. Game of Life
题目289. Game of Life思路题目中的Broad[][]是int型的,所以每一个数字可以表示多种状态。 为了能够表示当前一轮和下一轮的生死,总共4种状态,所以需要两位(我们假定1表示生,0表示死): 00:当前轮死+下轮死 01:当前轮生+下轮死 10:当前轮死+下轮生 11:当前轮生+下轮生 所以 利用Broad[i][j] & 1我们能得到当前轮的生死 利用Broad原创 2016-04-05 23:59:11 · 532 阅读 · 0 评论 -
LeetCode 309. Best Time to Buy and Sell Stock with Cooldown
题目309. Best Time to Buy and Sell Stock with Cooldown思路动态规划,改成最优子结构:方法一buyOrSell[i]:表示第i天一定卖的最大利润递推关系:for (i = 1...N) { if i <= 3 { 0...3中只能有一天买,一天卖,枚举最大max } else { 1、中间可能有多天买原创 2016-04-05 15:35:21 · 732 阅读 · 0 评论 -
LeetCode 312. Burst Balloons
题目312. Burst Balloons思路考虑最后一个戳破的气球,这个气球的位置可以把整个气球数组分成两部分。 注意是最后一个,不是第一个,之前一直没转过弯来。 利用动态规划思路:动态规划数组: DP[k][h]:nums[k...h]能戳破气球的最大值递推关系: 取k<m<h,nums[m]假设是最后一个戳破的气球 则DP[k][h] = for (m原创 2016-04-05 00:03:23 · 3117 阅读 · 1 评论 -
LeetCode 295. Find Median from Data Stream
原题295. Find Median from Data Stream思路因为需要在插入的时候作调整次数很少,所以选用大根堆,小根堆实现源码package com.leetcode;import java.util.Collections;import java.util.PriorityQueue;public class Leetcode295 { PriorityQueue<Inte原创 2016-04-04 19:44:26 · 461 阅读 · 0 评论 -
LeetCode 297. Serialize and Deserialize Binary Tree
题目LeetCode 297. Serialize and Deserialize Binary Tree仿照 331. Verify Preorder Serialization of a Binary Tree做的,将叶节点和非叶节点分开考虑,先序遍历二叉树,因为节点node有可能有多位或者负数,所以需要用逗号分隔:序列化如1,2,#,#,# 表示叶子节点,先序遍历反序列化也是用栈实现的,非原创 2016-04-04 17:47:56 · 1284 阅读 · 0 评论 -
LeetCode 262. Trips and Users
select allo.r, round(ifnull(canceled.c/allo.c,0),2) from(select count(1) as c,Request_at as r from Trips t,Users u where t.Client_Id = u.Users_Id and u.Banned = 'No' and t.Request_at between '2013-10-原创 2016-04-04 09:01:17 · 1517 阅读 · 0 评论 -
LeetCode 321. Create Maximum Number
思路对i做循环第一个数组中取出i个,第二个数组中取出k-i个把i个和k-i个分别存储在两个栈中对两个栈做归并循环k-1次。入栈的顺序: 首先检查当前数组元素和栈顶元素相对大小: 1、大于栈顶元素,把栈顶元素弹出 2、小于等于栈顶元素,直接入栈 3、如果栈length+数组剩余length==需要入栈的总数量,则全部入栈 比如9,1,9,8,3,2,需要入4个 9 1,9 9,原创 2016-03-30 15:14:07 · 3038 阅读 · 0 评论 -
LeetCode 324. Wiggle Sort II
思路首先仿照快速排序找出数组的中位数mid,这里平均复杂度O(n),最坏复杂度O(n^2)。 对数组下标作映射(假设数组长度为6):0 => 11 => 32 => 53 => 04 => 25 => 4则把大于mid的数分配给1,3,5,小于mid的数分给0,2,4,完成 注意: 为了防止有相邻两个数都等于中位数的问题,这里有一个分配的技巧: 1、对于0,2,4,将数组元素小于m原创 2016-03-30 12:30:18 · 1093 阅读 · 0 评论 -
LeetCode 331. Verify Preorder Serialization of a Binary Tree
原题Leetcode 331. Verify Preorder Serialization of a Binary Tree思路每当遇到X##这种类型的,就替换成#,直到没有X##。X表示数字Java实现 public boolean isValidSerialization(String preorder) { Pattern p = Pattern.compile("[0-原创 2016-03-23 15:55:55 · 1075 阅读 · 0 评论 -
LeetCode 260. Single Number III
题目260. Single Number III思路先把全部的数异或一次,得到的是A^B 找到A^B的最低一位为1的位,这一位表示A和B在这位上不一样,一个为0,一个为1 再次遍历数组,分别将该位是0,该位是1的数分两组异或 最后得到的两个数就是了。扩展如果有四个数不同,那么是不能用这种方法的,比如 000 ^ 011 ^ 010 ^ 101 = 000 这样根本不知道有几位相同,几位不同原创 2016-04-07 20:04:08 · 375 阅读 · 0 评论