自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode Binary Search Tree Iterator

题目链接思路: 建立一个栈。然后用这个栈记录到当前点路径上的所有点。避免了每次找下一个值要从根节点开始找。。 至于为啥这么想到的,因为题中说你用的最多的空间复杂度是树的深度。所以肯定就是有个记录数深度的东西,那只能是遍历当前节点的所有节点的一个链表了。于是我就想到这个算法了。至于为啥这个算法是平均上常量时间的。这个问题你可以看看《算法导论》平摊分析的解释。。我这里大约解释一下。就是你到当前节点虽

2015-08-31 10:23:40 328

原创 leetcode Course Schedule

题目链接思路: 根据给出的依赖关系构建一个图。然后在图里面用深度优先遍历判断是否有回路。如果依赖有回路,那么就是无法完成的。深度优先判断回路:如果一个课可以修到,那么着色为黑色实现如下: 因为深度优先遍历是递归的,所以我们在刚刚进去一个点A的时候着色为灰,代表这个点还有依赖(子孙B)。如果我们在遍历子孙B的时候,发现子孙依赖的节点是灰色的(不妨假设子孙B依赖A),那么代表产生环了,这是就是环路依

2015-08-30 10:10:06 276

原创 leetcode Number of Islands

题目链接思路: 广度优先搜索代码public class Solution { public int numIslands(char[][] grid) { int count=0; for(int i=0;i<grid.length;i++) { for(int j=0;j<grid[0].length;j++)

2015-08-29 21:36:55 288

原创 leetcode Container With Most Water

题目地址思路: 自己想到了一个算法复杂度为n平方的算法。放到oj上是超时的。因为我只是在最简单的方法上做了一点点优化。就是左端点向前移动的时候,如果下一个数比当前数小那么直接跳过。原因是,下一个数如果小了,那么桶高度一定减小,并且桶宽度也减小,可以直接过。public class Solution { public int maxArea(int[] height) { in

2015-08-29 20:44:27 311

原创 leetcode Minimum Size Subarray Sum

题目链接思路: 这个思路很难说清楚。但是代码很简单。时间复杂度是npublic class Solution { public int minSubArrayLen(int s, int[] nums) { int left=0; int right=-1; int currentSum=0; int currentLeng

2015-08-29 19:40:12 335

原创 leetcode Add and Search Word - Data structure design

题目链接 思路: 就是前缀树。如果碰到点符号就遍历好了,只要有一个返回true就返回true。。class TrieNode { // Initialize your data structure here. TrieNode charecters[]; boolean end; public TrieNode() { charecters=new

2015-08-29 15:20:43 279

原创 leetcode Implement Trie (Prefix Tree)

题目链接思路: 无class TrieNode { // Initialize your data structure here. TrieNode charecters[]; boolean end; public TrieNode() { charecters=new TrieNode[26]; end=false; }

2015-08-29 14:34:43 291

原创 leetcode Repeated DNA Sequences

题目链接思路: 这个题目和题中给的提示是一样的。基本思路就是把所有的10个在一起连续字符串放到一个HashMap里面。在以后遇见字符串的时候现在HashMap里面遍历一下。如果有的话那就代表前面出现过,如果只出现一次就可以放到结果里面了。那么现在的问题就是,内存可能没法放下所有10个字符串。所以就要采取压缩算法。思路就是去agct的字符串编码的不同位。然后放到一个int里面。相当于这个小int就能

2015-08-28 16:09:53 330

原创 leetcode Binary Tree Right Side View

题目链接思路: 就是层次遍历。在没排最结尾的位置添加一个标志。然后把最后一个输出就好了/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { va

2015-08-28 14:43:10 284

原创 leetCode House Robber II

题目链接思路: 因为这里面不可能同时抢第一个房间和最后一个房间。所以,我们可以把问题拆成两个。回归到House Robber I 问题一 第一个到倒数第二个房间采用House Robber I算法 问题二 第二个到最后一个房间采用House Robber I算法 比较大小后返回。。public class Solution { public int rob(int[] nums)

2015-08-28 13:47:14 349

原创 leetcode Longest Palindromic Substring

题目链接这个题目出现在华为的面试题目上了。开始看这个题目的时候感觉好难,根本无从下手。说实话,我连N3次方的算法都没想出来,(当然也没去想那么笨的算法,当然历史不容假设,可能我真的连笨的方法也想不出来)。在leetcode上有人对这个题目发了两篇文章, 第一篇文章这里 第一篇文章讲了如何用动态规划算法用N2次方的时间复杂度和空间复杂度做出来。还讲了一个利用N2次方时间复杂度,常量空间复杂度做出来

2015-08-27 11:14:06 290

原创 leetcode Binary Tree Paths

题目链接思路: 深度优先+递归回溯/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public c

2015-08-26 21:12:04 238

原创 leetcode Add Digits

题目链接思路: 这是一个高大上的思路。当然不是我这种愚钝的人想出来的。。 参考资料这里public class Solution { public int addDigits(int num) { if(num==0) { return 0; } int temp=num%9; ret

2015-08-26 20:30:53 244

原创 leetcode Ugly Number

题目链接思路: 题目不难。。但是陷阱很多。比如1和0public class Solution { public boolean isUgly(int num) { if(num==0) { return false; } if(num==1) { r

2015-08-26 19:59:34 257

原创 leetcode Missing Number

题目链接问题: 这个题目有个边界条件是,一定要判断如果缺少的是最后一个数怎么办?意思就是她给你的数里面没缺东西,你要把下一个数返回了。public class Solution { public int missingNumber(int[] nums) { Arrays.sort(nums); if(nums.length-1==nums[nums.length-1]

2015-08-26 15:35:34 294

原创 java基于Socket设计一个Mail的收发客户端

这是一个很无聊的作业。大约花了我一天的时间。 介绍下实验工具 邮件服务器用winmail 编程工具用Eclipse 键盘是cherry的红轴机械键盘高键位(不伤手,用立白) 桌子是自由升降桌(站着编程,有利于身体骨骼健康)首先为了便于程序之间的数据交换,要先设计几个结构体 分别是 GlobalVar 用于存储全局数据,如服务器地址,端口号 UserInfo 存储用户的用户名和密码

2015-08-25 13:55:06 3269 1

原创 Kth Largest Element in an Array

题目链接思路:优先级树 java里面优先级树使用的是PriorityQueue 要传入一个比较因子。这个因子对于优先级高的返回-1;public class Solution { public int findKthLargest(int[] nums, int k) { Comparator<Integer> OrderIsdn = new Comparator<In

2015-08-16 10:25:35 340

转载 sublime2 ubuntu 安装

Sublime Text 2是一款共享软件,收费但可以永久免费试用的编辑器,价格是59个美刀,相信开发者一定不了解中国人,也不面对中国市场,大笑。言归正传,ST2编辑功能强大,好评如潮,在Windows/Linux/Mac系统下都有对应的版本。 Linux下的安装流程如下: 1. 官网下载安装包 官网地址:http://www.sublimetext.com/2

2015-08-14 16:49:02 403

原创 Combination Sum III

题目链接思路回溯算法public class Solution { public List<List<Integer>> combinationSum3(int k, int n) { List<List<Integer>> totalResult=new ArrayList<List<Integer>>(); int record[]={0,0,0,0,0,

2015-08-13 10:48:20 291

原创 c语言const 转为非const的问题

昨天碰到一个奇葩的问题。 我定义的数据结构struct tree{ tree* left; tree* right;}然后我用priorityqueue< tree>载入进去。但是这个类的top()函数出来的东西是const类型的。会出现这种问题 所以这里涉及到了const转为非const的问题。 一个毁三观的代码是这样的tree aNewTreeNode; a

2015-08-12 18:47:05 5230

原创 Contains Duplicate III

题目链接思路: 这个题纠结了我一天。开始是思路不会,后来是各种程序溢出。 我在定义数组的时候用的是Integer类型。可是测试用例里面有个是 Integer.Max+t这样就会变成负数。导致计算错误。在编程的时候,程序溢出错误真的是很难处理的一个问题。必须要保证每个运算都不能溢出。public class Solution { public boolean containsNearby

2015-08-12 10:32:11 226

原创 Count Complete Tree Nodes

题目链接果然java不适合做acm。我看到上面一个人的答案写的代码,只是我把他的c++写成了java。于是碰到一个大的数组就超时了。。我确定我的代码和他的代码是一样的。所以只能直接贴代码了,class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x

2015-08-10 16:00:05 215

原创 Basic Calculator

题目链接非常聪明的代码实现class Solution {public: int calculate(string s) { int pos=0; return evaluate(s,pos); } int evaluate(string& s, int& i) { int res = 0; bool negFl

2015-08-10 14:00:50 327

原创 Basic Calculator II

题目链接 这个题刚刚做过。是一个c++的实验课,所以我直接用别人的代码了 当然,博客上的代码是我自己的。#include<iostream>#include<stack>#include<cctype>using namespace std;char priority[7][7]={ {'<','<','<','<','>','>','>'}, {'<','<','<','

2015-08-10 13:52:50 224

原创 Majority Element II

题目链接思路: 这个题累了我半天。思路就是先排序。然后就简单了错误: 在比较最后一个数组的时候我没有考虑循环退出的时候,最后一个符合要求的字符是没有判断是否要加入到结果里面的 也就是忘记了代码 if(cnt>n/3) { result.add(tempInt); }要在循环结束之后再判断一次

2015-08-10 13:46:43 187

原创 Kth Smallest Element in a BST

题目链接思想:左序搜索,在遍历的时候,用一个记录变量记录已经确定的点,因为小的点总是先访问到,每确定一个节点减去1。知道为零时候则是最k小的class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } }public class Solut

2015-08-10 10:37:56 265

原创 Lowest Common Ancestor of a Binary Tree

题目链接思路:这里来说,我的思路是用递归回溯把每个节点的路径都找出来。代码经过一点小小的手工测试,感觉是对的。但是,leetcode上给我1w个数的测试,然后栈就崩溃了。。在上面看到一个大神的解答,仅仅几行代码,足以看出他对递归的理解不是我能达到的。 我的代码import java.util.ArrayList;import javax.sound.midi.Soundbank;class Tre

2015-08-10 09:13:41 203

原创 Product of Array Except Self

[题目链接](https://leetcode.com/problems/product-of-array- except-self/)错误思路: 设置一个二位数组。d[i][j]是从i到j相乘的结果。当然,[0][last]某些情况是溢出的.然后这样结果中值就是[0][i-1]*[i+1]last。但是提交之后的结果是内存超出,要一个减少空间复杂度的算法。 错误代码import java.u

2015-08-09 16:22:34 235

原创 Search a 2D Matrix II

题目地址思想: 从左边用二分查找,找到第一个大于目标的行。如果没有大于就返回最后一个小于或者等于的行。然后在行内再用二分查找看看有没有对应的数。public class Solution { public boolean searchMatrix(int[][] matrix, int target) { int latRow=getRow(matrix, target,

2015-08-07 16:18:19 218

原创 Different Ways to Add Parentheses

题目链接思路: 分治法。一个输入的表达式。如果只有一个数字那么就取出这个数字返回。如果这个表达式有多个数,那么把这个表达式分成两部分,前面部分和后面部分递归调用自己。public class Solution { public List<Integer> diffWaysToCompute(String input) { List<Integer> result=new Arr

2015-08-07 14:40:31 248

原创 Best Time to Buy and Sell Stock II

题目链接思想: 贪心算法。只要第二天的价格比当天高,那么就买入然后第二天卖掉。 int profit=0; for(int i=0;i<prices.length-1;i++) { if(prices[i]<prices[i+1]) { profit+=prices[i+1]

2015-08-06 21:28:03 261

原创 Single Number

题目链接严格来说这个程序编写的很不好 在于输出循环的地方。那个地方迭代器必然只能迭代一次,但是我这么写就注定有很大的迷惑性,并且return0 也给程序的理解增加难度,因为这个是永远到达不了的代码 这个题目还有一个常量空间的算法,但是那个已经不是我写的了。常量算法用了 number XOR number =0这个特性。可以吧所有的数都xor到一个ans里面。最后剩下的ans就是那个一个的数字。秒

2015-08-06 21:01:12 203

原创 Maximal Square

题目链接动态规划 状态转移公式 d[i][j] = Math.min( Math.min( d[i-1][j], d[i][j-1]), d[i-1][j-1] ) + 1; public class Solution { public static void main(String args[]) { } public static int maximalSqua

2015-08-06 20:27:46 288

原创 Implement Stack using Queues

题目地址class MyStack { // Push element x onto stack. Queue<Integer> queueA=new ArrayDeque<Integer>(); Queue<Integer> queueB=new ArrayDeque<Integer>(); boolean Aflag=true; public void push

2015-08-06 16:14:18 243

原创 Invert Binary Tree

题目链接 Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off./** * Definition for a binary tree node. * public class TreeNo

2015-08-06 15:04:10 293

原创 Power of Two

题目链接这个题我感觉没啥难的。为啥那么多人不能一次通过呢? Total Accepted: 17382 Total Submissions: 58584public class Solution { public boolean isPowerOfTwo(int n) { if(n<1) { return false;

2015-08-06 14:50:17 217

原创 Implement Queue using Stacks

题目链接思路: 两个栈。当有输出的时候。如果B里有东西就pop.没有的话把所有A里面的东西拿出来放入B。所有的入队全部放在A里面。import java.util.Stack;class MyQueue { // Push element x to the back of queue. Stack<Integer> stackA=new Stack<Integer>(); S

2015-08-06 14:33:12 210

原创 Palindrome Linked List

题目链接思路: 元素一次进栈,然后再依次出栈就是一次反转。 第一次遍历把链表里面的数值都放到一个栈里面。 然后再遍历一次链表,其中每遍历一个元素对比栈顶的元素,如果相等继续算法,不等返回假。题目的意思是有线性时间和常量空间的算法,我没有想到。看看之后能有什么解决方法。再来补充。/** * Definition for singly-linked list. * public class L

2015-08-06 11:27:39 245

原创 Lowest Common Ancestor of a Binary Search Tree

题目链接思路: 就是运用二分查找。每查找一步比较一下分支的走向。如果两个节点的分支走向不同,那么现在这个节点就是最低的公共祖先,如果相同,那么接下来的查找还可能相同,程序要继续运行。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

2015-08-06 10:19:30 222

原创 Delete Node in a Linked List

题目链接思路: 因为只给当前要删除的节点的访问。所以我们没法返回之前的节点设置next。所以我们只能按照数组删除的方式,把之后所有的节点数据往前移动。/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(in

2015-08-06 09:36:04 231

空空如也

空空如也

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

TA关注的人

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