摘要: 一开始没理解对题意,估计是理解成III那道题的样子了。理解对了以后发现挺简单的。但看了参考之后发现它的解法更简洁优美,就直接照着来了。public class Solution { public int maxProfit(int[] prices) { // Start typ... 阅读全文
posted @ 2013-08-05 13:51 阿牧遥 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 一趟遍历。O(n)。期间记录最小的价格min的值并不断比较更新最大差价。public class Solution { public int maxProfit(int[] prices) { // Start typing your Java solution below ... 阅读全文
posted @ 2013-08-05 12:20 阿牧遥 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 简单题。先把横的竖的扫一下,然后按照每个3*3的小格扫一遍。import java.util.HashSet;public class Solution { public boolean isValidSudoku(char[][] board) { // Start typin... 阅读全文
posted @ 2013-08-04 15:58 阿牧遥 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 二分查找的小变化。简单题。public class Solution { public int searchInsert(int[] A, int target) { // Start typing your Java solution below // DO NOT write main() function return searchInsert(A, target, 0, A.length - 1); } public int searchInsert(int[] A, int target, int left, int... 阅读全文
posted @ 2013-08-04 15:34 阿牧遥 阅读(192) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/dwdxdy/archive/2012/07/28/2613135.html利用rand5()产生rand7().rand5()产生1到5的整数,rand7()产生1到7的整数.解决思路与上述的练习题是一样的.利用rand5()产生的一个整数空间,然后将其映射到[1,7]的整数空间上,映射时保证概率相等,且等于1/7.下面介绍几个有意思的实现.1.利用预置数组该方法简单,易理解,但是不具扩展性,需要额外存储空间.int rand7(){ int vals[5][5] = { {1,2,3,4,5}, {6,7,1,... 阅读全文
posted @ 2013-08-04 00:21 阿牧遥 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 二分查找。找到后往左往右移。又说有种log(n)的算法是二分查找最左的,然后二分查找最右的。省却最后那部分O(n)的public class Solution { public int[] searchRange(int[] A, int target) { // Start typing your Java solution below // DO NOT write main() function int pos = searchTarget(A, target, 0, A.length -1); if (pos == -1) ... 阅读全文
posted @ 2013-08-03 23:41 阿牧遥 阅读(1497) 评论(2) 推荐(0) 编辑
摘要: 简单题吧。用递归解决了。中间有个A[start] end) return -1; int mid = (start + end) / 2; if (A[mid] == target) return mid; if (A[start] = A[start] && target A[mid] || target = A[start] || target A[mid] && target <= A[end]) { return search(A, target, mid+1, end); } } return -1; ... 阅读全文
posted @ 2013-08-03 23:31 阿牧遥 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 第二刷:首先,此题可以用O(n)的空间做,就是第一遍标识所有匹配的位置,第二遍找最长连续的匹配就行了。那么改善一点就是记录上一个不匹配的位置就行了,上一个不匹配的位置有两种,一种是多余的')',这个用一个变量记录;另一个是'(',这个用栈记录。class Solution {public: i... 阅读全文
posted @ 2013-08-03 17:07 阿牧遥 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 下一个组合数。因为有数组内一部分的排序,c++更自然些。算法很简单,从末尾向开头找不合顺序的,然后调换,然后把后面的排序。调换要找到那个刚好比pivot大的元素,因为再小的,如果换过去,这些顺序已经排过了。#include #include using namespace std;class Sol... 阅读全文
posted @ 2013-08-03 12:29 阿牧遥 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 代码写的很乱。参考的思路和昨天的Minimum Window Substring有类似。参考的文章是:http://discuss.leetcode.com/questions/210/substring-with-concatenation-of-all-words代码里还特意把字符串转成数字id用来简化,这个优化不是必须的,没有的话代码会简单点。一开始是用字典计数,然后穷举。后来时间不过,就只能用Min Window类似的双指针扫描的思路优化,保证一遍下来。差不多是O(n)的复杂度。又看了一下我和参考中代码的区别,由于受到昨天的影响,我还在计算每个字符(串)超出的情况,其实现在只要记录全部 阅读全文
posted @ 2013-08-03 00:32 阿牧遥 阅读(611) 评论(1) 推荐(0) 编辑