摘要: Search in Rotated Sorted Array Binary Search的变种。由于rotated的存在,直接A[mid]<key的判断并无法解决继续搜索哪一半边。 思路是分情况,分为左半边有序还是右半边有序,再细分是继续搜索左半侧还是右半侧。由于涉及a[mid]和a[low],a[ 阅读全文
posted @ 2018-06-01 23:02 約束の空 阅读(132) 评论(0) 推荐(0)
摘要: 最大化最小值的问题。 方法一:直接做,顺便复习一下迭代器和lower_bound的用法。 方法二:分别计算每个house左面和右面距离最近的heater。时间复杂度比上述要低。学习一下 *max_element 和 *min_element 的用法。 阅读全文
posted @ 2018-05-31 17:21 約束の空 阅读(127) 评论(0) 推荐(0)
摘要: class Solution { public: int findTargetSumWays(vector& nums, int S) { return cal(0,0,nums,S); } int cal(int index, int sum, vector &nums, int S){ if (index==nums.size... 阅读全文
posted @ 2018-05-31 00:37 約束の空 阅读(74) 评论(0) 推荐(0)
摘要: 第一想法是建一个unordered_set,时间复杂度O(m+n),空间复杂度O(m)或O(n) 更巧妙的方法是用两个指针,分别指向两个list。当遍历结束时,指向另一个list的head。两个指针的相遇点就是intersection开始的地方。空间复杂度O(1)。 unordered_set Tw 阅读全文
posted @ 2018-05-18 13:17 約束の空 阅读(95) 评论(0) 推荐(0)
摘要: 准备dropbox的时候又仔细看了看这道题。本题的难点一是in place,二是如果board很大或者无限大怎么办。 Naive In Place 由于状态用一位表示即可,因此利用两位(two bits)就可以同时记录之前的状态和新状态,进而不用新建一个board。 低位是原来的状态,高位是新状态。 阅读全文
posted @ 2018-05-17 13:52 約束の空 阅读(106) 评论(0) 推荐(0)
摘要: 可以to_string转换成string做。 不转换成string的话,计算出反转后一半的数即可。 阅读全文
posted @ 2018-05-17 12:18 約束の空 阅读(81) 评论(0) 推荐(0)
摘要: LeetCode 3. Longest Substring Without Repeating Characters 典型的Sliding Window的问题,维护一个不重复的最长字串的区间。每次加入一个新元素,并维护区间性质。 class Solution { public: int length 阅读全文
posted @ 2018-05-17 10:48 約束の空 阅读(119) 评论(0) 推荐(0)
摘要: 二分的原理是利用区间内值有序的特点, 不断让可行区间减半, 最终可行区间长度减到1得到答案 要保证二分能得到正确答案并且不会死循环, 要保证两个条件: 1. 解一直在候选区间里2. 每次判断后可行区间都会缩小(特别是左右端点相距为1的时候) 所以写二分的时候,一定要测试只有两个点时,不同情况下区间是 阅读全文
posted @ 2018-05-12 12:57 約束の空 阅读(220) 评论(0) 推荐(0)
摘要: 直接做 one-pass,一边找最低的价格,一边找最大的gap,就是我们最大的profit。 Kadane's Algorithm 同样是 Kadane's Algorithm,另一种理解思路: 和53题最大子串和一样的题目,把买入到售出当做一个子序列想就一模一样了。DP方程如下: f[i]:以a[ 阅读全文
posted @ 2018-05-02 15:34 約束の空 阅读(118) 评论(0) 推荐(0)
摘要: 方法一:DP 以前做OJ的时候都想不通为什么是DP,现在终于搞明白了。 一开始想的时候,想着 dp[i] 为下标0~i元素最大的字串和。 dp[i] = max { dp[i-1] a[i]不在subarry中 dp[i-1]+ a[i] 在subarray中 承接之前的subarray a[i] 阅读全文
posted @ 2018-05-02 12:30 約束の空 阅读(135) 评论(0) 推荐(0)