摘要: 二分查找。找到后往左往右移。又说有种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 阿牧遥 阅读(1499) 评论(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 阿牧遥 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 第二刷:首先,此题可以用O(n)的空间做,就是第一遍标识所有匹配的位置,第二遍找最长连续的匹配就行了。那么改善一点就是记录上一个不匹配的位置就行了,上一个不匹配的位置有两种,一种是多余的')',这个用一个变量记录;另一个是'(',这个用栈记录。class Solution {public: i... 阅读全文
posted @ 2013-08-03 17:07 阿牧遥 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 下一个组合数。因为有数组内一部分的排序,c++更自然些。算法很简单,从末尾向开头找不合顺序的,然后调换,然后把后面的排序。调换要找到那个刚好比pivot大的元素,因为再小的,如果换过去,这些顺序已经排过了。#include #include using namespace std;class Sol... 阅读全文
posted @ 2013-08-03 12:29 阿牧遥 阅读(436) 评论(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) 编辑