04 2015 档案

OJ练习37——T190 Reverse Bits
摘要:把一个32位无符号整数按位翻转,For example, given input 43261596 (represented in binary as 00000010100101000001111010011100), return 964176192 (represented in binary... 阅读全文

posted @ 2015-04-30 09:45 EmmaLi 阅读(157) 评论(0) 推荐(0)

OJ练习36——T189 Rotate Array
摘要:把数组做给定次数的rotate操作。rotate一次:即把末尾的元素放到开头,将其他的元素循环右移一个单位。【思路】1.再开个空间,将末尾的k个元素按从前到后的顺序放在新数组的开头,再将原数组剩下的元素按从前到后的顺序赋给新数组剩下的空间。节省了时间复杂度,增加了空间复杂度。2.顺向思维,每次处理一... 阅读全文

posted @ 2015-04-29 15:23 EmmaLi 阅读(131) 评论(0) 推荐(0)

OJ练习35——T169 Majority Element
摘要:得到一串整数的主元素。主元素即出现次数多于n/2(下界)的数。【思路】1.用map类型,记录每个数据出现的次数。2.用博主陆草纯的算法,当连续两数不同时,就把两者抵消掉,剩下的就是主元素。【my code】int majorityElement(vector& nums) { mapm... 阅读全文

posted @ 2015-04-29 09:42 EmmaLi 阅读(145) 评论(0) 推荐(0)

编程之美2.14——求和最大子数组
摘要:这里记录的是从《算法导论》看来的解法,待补充。【解法1】——递归,二分将数组分成左右两边,最大子数组出现的情况可能有:1)左半边2)右半边3)跨左右两边对于半边求最大子数组,又可以递归上述思维,所以难点在于写出跨左右两边的情况。代码:void find_max_cross_subarray(int ... 阅读全文

posted @ 2015-04-29 08:32 EmmaLi 阅读(153) 评论(0) 推荐(0)

OJ练习34——T165 Compare Version Numbers
摘要:比较版本高低。版本的格式:1.1.1可能有多个分隔符。相等则返回0, 大于返回1, 小于返回-1.【思路】分别比较分隔符的每段,转换成十进制后的大小;相等则继续比较下一段,不等则返回相应的结果。【my code】int compareVersion(string version1, string v... 阅读全文

posted @ 2015-04-28 10:30 EmmaLi 阅读(166) 评论(0) 推荐(0)

OJ练习33——T172 Factorial Trailing Zeroes
摘要:求n!末尾有多少个0.【思路】1.发现规律2*5会产生1个0,4*25会产生2个0,8*125会产生3个0,……又偶数都包含因子2,所以只要有5,25,125(5^i)出现,就会有配套的2^i出现,所以最终算法是,看n中包含多少个5的次幂。2.笨办法,先算出n!,再循环除以10,计算次数。【othe... 阅读全文

posted @ 2015-04-28 10:25 EmmaLi 阅读(147) 评论(0) 推荐(0)

OJ练习32——T160 Intersection of Two Linked Lists
摘要:找两个链表的交叉节点,像这样:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3没有交叉返回null;第一个相同的节点就是交叉开始的地方(经验证,该题系统是这样,见后)【思路】1.从后向前遍历,遇到第一个不相同的就停止,但是链表不支持逆序,drop。... 阅读全文

posted @ 2015-04-27 16:30 EmmaLi 阅读(148) 评论(0) 推荐(0)

OJ练习31——T155 Min Stack
摘要:设计栈,要求支持pop,push,top,以及返回栈中最小值的功能。【思路】首见题型。要用两个stack,其中一个保留最小值。每次选择比minstack.top小的值push进去,这样就能保持top始终是最小值。【other code】class MinStack {private: stac... 阅读全文

posted @ 2015-04-27 10:07 EmmaLi 阅读(163) 评论(0) 推荐(0)

OJ练习30——T125 Valid Palindrome
摘要:判断字符串是否是回文。字母、数字都算在内;空串也是回文。【思路】经典回文,两个指针,一个从前向后遍历,一个从后向前,遇到不是要求字符的就跳过。前后指针位置交叉(i>j),则遍历结束。特殊的地方在于,包含字母和数字,如果一一排除,代码很繁琐。【my code】bool isPalindrome(str... 阅读全文

posted @ 2015-04-27 08:57 EmmaLi 阅读(159) 评论(0) 推荐(0)

OJ练习29——T119 Pascal's Triangle II
摘要:打印杨辉三角指定行,返回vector类型。【思路】1.照搬前面一道题,保存所有行;2.最小空间复杂度0(n),也是题目要求。即每一行覆盖上一行,为了保证不提前覆盖有效值,需要从后向前算。【other code】vector getRow(int rowIndex) { vector r... 阅读全文

posted @ 2015-04-24 15:04 EmmaLi 阅读(100) 评论(0) 推荐(0)

OJ练习28——T118 Pascal's Triangle
摘要:打印杨辉三角:[ [1], [1,1], [1,2,1], [1,3,3,1],[1,4,6,4,1]]输入打印的行数,返回vector >类型。【思路】1.我的思路是,先分配vector的空间,用resize,再用下标访问[i]。2.别人的思路,每行都是一个新vector cur,赋值后push_... 阅读全文

posted @ 2015-04-24 14:36 EmmaLi 阅读(114) 评论(0) 推荐(0)

OJ练习27——T112 Path Sum
摘要:二叉树中是否存在一条路径(从根节点到叶节点)的和等于给定值。【思路】1.想到用栈深度遍历,不会实现。2.递归,每个节点自身的值,加上左子树或右子树等于给定值吗?【other code】bool PathSum(TreeNode *root,int sum,int val) { ... 阅读全文

posted @ 2015-04-24 10:16 EmmaLi 阅读(131) 评论(0) 推荐(0)

OJ练习26——T111 Minimum Depth of Binary Tree
摘要:求从根节点到叶子节点的最短路径。【思路】开始想到返回左右子树最短深度,测试发现对于一个根节点带一个孩子节点,其最短路径是2,不是最小深度1,此种特殊情况单独列出。【my code】int minDepth(TreeNode *root) { if(root==NULL) ... 阅读全文

posted @ 2015-04-24 08:50 EmmaLi 阅读(110) 评论(0) 推荐(0)

OJ练习25——T110 Balanced Binary Tree
摘要:判断一棵树是否是平衡树。平衡数的意思是,树左右子树高度之差不能超过1.【思路】递归判断每个子树是否是平衡数,需要调用高度计算的函数。【my code】bool isBalanced(TreeNode *root) { if(root==NULL) return t... 阅读全文

posted @ 2015-04-23 16:30 EmmaLi 阅读(132) 评论(0) 推荐(0)

OJ练习24——T104 Maximum Depth of Binary Tree
摘要:求二叉树深度。【思路】很简单,二叉树经典。用递归求左树右树的深度,较大值加1即可。【other code】int maxDepth(TreeNode *root) { if(root==NULL) return 0; //if(maxDepth(ro... 阅读全文

posted @ 2015-04-22 22:04 EmmaLi 阅读(111) 评论(0) 推荐(0)

OJ练习23——T102 Binary Tree Level Order Traversal
摘要:层次遍历二叉树,结果分行列出:[ [3], [9,20], [15,7]]【思路】层次遍历要用队列,还要有记录每层节点数的数组。记录层数是难点,要用每个节点来推算其下一层,看到remlostime的做法是自定义struct,带一个level信息,必须这样吗??【盲点】c++栈和队列头文件:#incl... 阅读全文

posted @ 2015-04-21 14:29 EmmaLi 阅读(114) 评论(0) 推荐(0)

OJ练习22——T101 Symmetric Tree
摘要:判断一颗二叉树是否是镜面(即轴对称)。Leecode表示二叉树:{1,#,2,3}是层次遍历的结果,#表示节点为空。【思路】1.我的思路,镜面树一个特征,把左树的左右孩子都交换,就和右树完全一样。所以另写两个函数,都使用递归,一个是判断两树是否相等。2.别人的思路,用一个树的左树比较另一棵树的右树,... 阅读全文

posted @ 2015-04-21 10:22 EmmaLi 阅读(155) 评论(0) 推荐(0)

OJ练习21——T100 Same Tree
摘要:遇到树了!终于看起来高大上一点了= =比较两棵二叉树,相等则返回true。【思路】递归,if(p->val==q->val&&isSameTree(p->left,q->left)&&isSameTree(p->right,q->right)) return true.注意还要考虑特殊情况。【my ... 阅读全文

posted @ 2015-04-21 09:02 EmmaLi 阅读(135) 评论(0) 推荐(0)

OJ练习20——T88 Merge sorted array
摘要:把有序序列B合并到有序序列A中,A的大小大于m+n。特别的地方在于,不是返回一个新数组。【思路】可以开一个local数组,归并两串,再把结果赋给A。但不是很喜欢这种做法。(因为太简单了)插入排序是把当前元素插入到前面已经有序的m个元素中,与题目环境很符合。【other code】void merge... 阅读全文

posted @ 2015-04-21 08:49 EmmaLi 阅读(146) 评论(0) 推荐(0)

OJ练习19——T70 Climbing stairs
摘要:以1阶或2阶上一个n阶楼梯。百度之,斐波那契数列,即每个数是其前两个数的和。知道上面这个规律,答案就非常非常简单了。【my code】int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; ... 阅读全文

posted @ 2015-04-17 16:21 EmmaLi 阅读(147) 评论(0) 推荐(0)

OJ练习18——T67 Add Binary
摘要:把以字符串表示的两个二进制数相加。【思路】活学活用昨天学到的reverse。将倒序相加变成正序相加。但这样的话,就要用到三个reverse,两个原串,最后还要把结果翻转。可能对速度有影响,经测试,好像还比不翻转快一点点。一个point是,两串长度不同,一串加完了另一串怎么办?我的办法是将其视为0,这... 阅读全文

posted @ 2015-04-17 09:20 EmmaLi 阅读(141) 评论(2) 推荐(0)

OJ练习17——T66 Plus One
摘要:用单个保存的数字表示一个十进制数,实现+1操作。保存的第一个数一定要是有意义的(非零)。【思路】很容易想到把保存的数字转换为实际十进制数,然后+1,再按原格式保存,但很明显有超范围数据如何表示的问题。比如9876543210.(试过用long long类型也放不下?)所以要考虑几种情况:1.个位数字... 阅读全文

posted @ 2015-04-16 10:34 EmmaLi 阅读(151) 评论(0) 推荐(0)

OJ练习16——T58 Length of Last Word
摘要:返回一字符串最后一个单词的长度。【思路】一道水题,但被以前做过的算法局限了。字符串分割成单词:两个指针,一个指向单词头,一个指向单词尾,两者之间即为一个单词。于是我想到用这个思路,从前向后,却不能处理最后一个字符是‘ ’的情况。正确的思路应该是从后往前遍历!【other code】int lengt... 阅读全文

posted @ 2015-04-16 09:18 EmmaLi 阅读(116) 评论(0) 推荐(0)

hihocoder——微软在线笔试T1
摘要:声明:不知道会不会涉及保密协议,只是单纯记录一下自己的代码。输入一个字符串,和x y z三个整数将字符串字符逐个放入盒子,当前n个字符个数的差等于x y z时,前n个字符消失,再将剩余的字符放入盒子。求出盒子放过的最多个字符。(原题目是颜色不同的球入盒)eg:输入(“RRYBRBRYBRY”,4,1... 阅读全文

posted @ 2015-04-15 10:45 EmmaLi 阅读(364) 评论(0) 推荐(0)

OJ练习15——T38 Count and Say
摘要:【前记】太感人了T T竟然一次性A了一道T T,恩,淡定淡定。count-and-say序列如下:1, 11, 21, 1211, 111221, ...1 is read off as "one 1" or 11.11 is read off as "two 1s" or 21.21 is rea... 阅读全文

posted @ 2015-04-15 09:38 EmmaLi 阅读(131) 评论(0) 推荐(0)

OJ练习14——T36 Valid Sudoku
摘要:判断一个sodoku是否有效。sodoku的规则是:每一行九个格子,1-9各出现一次;每一列九个格子,1-9各出现一次;每一个九宫格,1-9各出现一次。sodoku板可以只填了部分格子,只需要判断已填的格子是否符合规则。 阅读全文

posted @ 2015-04-14 15:38 EmmaLi 阅读(127) 评论(0) 推荐(0)

OJ练习13——T28 Implement strStr()
摘要:实现字符串strstr()的功能,即从母串中查找子串第一次出现的位置(序号),没有出现则返回-1.【思路】刚开始学c时就学到过这个例子。不同之处在于,这里参数是string,处理起来要比char*简单。【my code】int strStr(string haystack, string needl... 阅读全文

posted @ 2015-04-14 09:04 EmmaLi 阅读(155) 评论(0) 推荐(0)

OJ练习12——T27 Remove Element
摘要:删掉数组中与给出值相同的元素,返回新长度。“The order of elements can be changed. It doesn't matter what you leave beyond the new length.”(!这是重点提示!)【思路】题目有了第二句就很好办了,数组顺序可以改... 阅读全文

posted @ 2015-04-13 15:06 EmmaLi 阅读(143) 评论(0) 推荐(0)

OJ练习11——T26 Remove Duplicates from Sorted Array
摘要:删除已排序数组的重复元素,返回数组处理后的新长度。要求空间复杂度为1.【思路】一道水题,折腾了一个多小时。1)原来的思路:从后向前遍历元素,遇到和前一个相同的则记为一个不可能的数(比如A[0]-1,假设是0),然后从前向后遍历,两个标记,遇到0就不复制。在这个地方遇到问题,总是出错?【更新】见下my... 阅读全文

posted @ 2015-04-13 09:35 EmmaLi 阅读(144) 评论(0) 推荐(0)

OJ练习10——T21 Merge Two Sorted Lists
摘要:合并有序链表,链表结构已给出。要求返回的链表由原链表的节点构成,不再重新创建节点。【思路】数据结构入门算法。分别为两个链表设“滑块”,比较当前滑块数值的大小,小的就将返回链表的末尾指针指向它。注意:1.要为返回链表设立总是指向其尾部节点的标志,方便归入新节点。2.考虑原始链表为空的情况。【my co... 阅读全文

posted @ 2015-04-10 10:04 EmmaLi 阅读(123) 评论(0) 推荐(0)

OJ练习9——T20 valid parentheses
摘要:括号匹配。输入只含有括号的字符串,判断是否匹配。【思路】考察栈。但是小白没用过c++的栈,只好自己模拟一个。小白的思路看起来是很清晰的,代码如下:【my code】bool isValid(string s) { int i=0; int j=-1; if(... 阅读全文

posted @ 2015-04-09 11:00 EmmaLi 阅读(160) 评论(0) 推荐(0)

OJ练习8——T19 remove nth node
摘要:删除链表倒数第n个节点,返回链表。要求在一趟遍历中完成。【思路】两个指针,初始都指向head。p向下遍历,当遇到第n-1个节点时,q开始向下遍历,这样当p走到最后一个节点,q所指就是要删除的节点。另需一个pre指针指向q的前一个节点,删除时pre->next=q->next。【my code】Lis... 阅读全文

posted @ 2015-04-09 09:56 EmmaLi 阅读(112) 评论(0) 推荐(0)

OJ练习7——T14 Longest Common Prefix
摘要:得到一个string序列的最长公共前缀。【思路】先求得最小string的长度,使得比较次数尽可能少。对于要返回的prefix的每一位,从第一个string中取一个字符,拿来和其他string同样位置的字符比较;如果不相同,则返回当前的prefix,否则添加到prefix后。【注意】读取第i个stri... 阅读全文

posted @ 2015-04-08 10:04 EmmaLi 阅读(111) 评论(0) 推荐(0)

导航