上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 31 下一页
摘要: 题目给出几条线段, 求解这几条线段把给定平面切成的份数思路1. 枚举 3 条直线的情况, 发现有规律可循两条直线, 一个交点 -> 空间分成 4 份三条直线, 两个交点 -> 空间分成 6 份三条直线, 三个交点 -> 空间分成 7 份即, 份数= 直线数+交点数+12. 题目转化成求解直线的交点数假设直线在左边的从上到下的顺序是 a,b,c, 在右边从上到下是 c,b,aa,0 b,1, c,2那么右边就变成了, 2,1,0求其逆序数就是结果 3 阅读全文
posted @ 2014-02-26 22:00 SangS 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 题目1. 所有的 ID 都出现 2 次, 只有一个例外, 找到那个例外的 ID2. 所有的 ID 都出现两次, 只有两个例外, 找出例外的那两个总计1. 剑指 offer 上有这两道题的解法, 不过那时并没有讨论两个例外ID相同的情况2. 当已知例外的 ID 相同时, 我们需要更多的先验知识, 原始的所有 ID. 然后使用除法或者减法.3. 当不确定例外的 ID 是否相同时, 我们可以先做一步加法, 求得 x+y = a, 还需要一个式子. 这个式子可以使 x*y, 或者 x^2+y^2 阅读全文
posted @ 2014-02-26 21:49 SangS 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 题目书店搞促销, 同时购买多卷书时, 有机会享受优惠2本优惠 5%, 3本 10%, 4 本 20% 5 本 25%设计算法, 求解购买一本书的最低价格分析1. 第一个感觉是一次购买的越多省钱越多, 即贪心的思想, 但这样的思路对不对呢? 考虑下面一个案例购买两本卷一, 两本卷二, 两本卷三, 一本卷四卷五假如按照贪心的思路去求解, 共会花费 51.6 元, 而假如四本四本的买, 仅需 51.2 元, 所以贪心法不一定总是最优解2. 动规解法F(x1, x2, x3, x4, x5) 表示购买 x1 本卷一, x2... 所需的最少钱数稍加分析, 可以得出, F(x2, x1, x3, x4, 阅读全文
posted @ 2014-02-26 21:43 SangS 阅读(302) 评论(0) 推荐(0) 编辑
摘要: 题目假设有这样一个拥有三个操作的队列1. Enqueue(v)2. Dequeue()3. MaxEle()请设计一种数据结构和算法, 让 MAXELE 操作的时间复杂度尽可能的低思路1. 刚看到题, 以为这就是 stack 求 min 的逆过程, 着实是理解有误2. 比较优雅的解法是利用两个堆栈来模拟队列, 模拟的方法以前是做过习题的, 不必多说3. 重点是 stack 的实现. stack 有 4 个私有变量Type stackItem[MAXN]; // store real numbersint stackTop; // point to top of stackint link2Ne 阅读全文
posted @ 2014-02-24 21:06 SangS 阅读(1336) 评论(0) 推荐(0) 编辑
摘要: 题目给定字符串 s1 和 s2, 要求判定 s2能否能够被通过 s1 做循环移位得到的字符包含. s1 = AABCD, s2 = CDAA 返回 true. 给定 s1 = ABCD 和 s2 = ACBD 返回 false解法1. 最直接的方法是对 s1 进行移位然后比较. 若 s1 较长, 那么效率较低2. 题目转化成比较 s2 是否在 s1s1 中,这样可以利用 kmp 等算法提高对比效率 阅读全文
posted @ 2014-02-24 19:52 SangS 阅读(169) 评论(0) 推荐(0) 编辑
摘要: Leetcode 上有连续的两道题, 一个是 insert interval, 一个是 merge interval, 其中 insert interval 是 merge interval. 其中 insert interval 还是 merge interval 的扩展, 即便看起来相反解法1. 先对目标区间进行处理, 先排序后 merge, 时间复杂度为 o(nlogn)2. 使用二分查找, 找到一个区间, 然后看该区间是否包含源区间3. 因为目标区间是非连续的, 所以(2) 只要找出一个区间就好 阅读全文
posted @ 2014-02-24 19:25 SangS 阅读(541) 评论(0) 推荐(0) 编辑
摘要: 解法1. 假设在目标数组 array[] 的前 i 个元素中, 最长递增子序列的长度为 LIS[i]那么状态转移方程为LIS[i] = max(1, LIS[k]+1) array[i+1] > array[k], for any k 2, 就可以直接把 4 加到前面的子序列中形成一个新的递增子序列受此启发, 我们希望找到前 i 个元素中的一个递增子序列, 使得这个递增子序列的最大元素比 array[i+1] 要小, 且长度尽可能的长. 这样将 array[i+1] 加在该递增子序列后, 便可找到以 array[i+1] 为最大元素的最长递增子序列长度为 1 的递增子序列最大元素的最小值 阅读全文
posted @ 2014-02-24 18:43 SangS 阅读(254) 评论(0) 推荐(0) 编辑
摘要: 这道题在算法课上当做例题讲过, 当时的印象也比较深另有一道近似算法的题也在算法课上讲过, 并且印象更深, 复习的时候完全没管, 以为志在必得, 结果真考了那道近似算法, 我却没能打出来为避免阴沟翻船, 寻找最近点对还要再回顾一下算法核心是分治算法1. 分别根据点的 x,y 值进行排序2. 在 x 轴上划一道垂线, 将点均分成两半3. 假设最近点对都在左/右部分, 递归计算左/右半部分的最短距离并返回较小值 dis4. 假设最近点对分别在左右两个部分, 横跨中心的竖线. 中心线为中心, 2*dis 为宽度画一个矩形, 横跨中心线的最近点对 candidate 都在这个矩形内. 将这些点按照 y 阅读全文
posted @ 2014-02-24 18:00 SangS 阅读(1268) 评论(0) 推荐(0) 编辑
摘要: 解法1. 设置 min, max 两个变量, 然后遍历一遍数组, 比较次数为 2*N2. 依然设置 min, max 两个变量并遍历数组, 但将遍历的 step 设置为 2, 比较次数为 1.5 * N3. 改变数组的做法. 先排个序使得 min 总是在偶数位置, max 总在奇数位置, 比较次数依然是 1.5*N4. 分值算法, 实际上就是归并算法的变形实现较为复杂, 但事件复杂度依然为 1.5N 阅读全文
posted @ 2014-02-24 17:30 SangS 阅读(623) 评论(0) 推荐(0) 编辑
摘要: 题目任意给定一个正整数 N, 求一个最小的正整数 M (M > 1), 使得 N*M 的十进制表达式中只有 0 和 1.解法1. 枚举0,1能够组成的数字, 可以组成一颗二叉树然后由 BFS 算法最终能够得到目标解. 但时间复杂度太高2. 优化. 考虑对每一个节点加上一个属性, 对 N 求余的值. 假设两个节点X, Y的余相同, 那么由该节点扩展的下一层的 4 个子节点, 分别为 10*X, 10*X+1, 10*Y, 10*Y+1. 由取模的定理知道 10*X MOD N == 10*Y MOD N, 10*X +1 MOD N == 10*Y +1 MOD N假设 X < Y, 阅读全文
posted @ 2014-02-24 16:30 SangS 阅读(170) 评论(0) 推荐(0) 编辑
上一页 1 ··· 11 12 13 14 15 16 17 18 19 ··· 31 下一页