• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sfesly
博客园 首页 新随笔 联系 订阅 订阅 管理

随笔分类 -  算法导论

算法导论第二版中的思考题解答
 
leetcode 221 Maximal Square
摘要:这题使用动态规划,基本想法是建立一张表table,table[i][j]就标志以点(i, j) 为右下角顶点的正方形最大边长,显然,可以通过table[i - 1][j - 1]来得到table[i][j]的值(正方形,只需要考虑对角的方向)。class Solution {public: i... 阅读全文
posted @ 2015-08-08 08:42 sfesly 阅读(221) 评论(0) 推荐(0)
LeetCode222 Count Complete Tree Nodes
摘要:对于一般的二叉树,统计节点数目遍历一遍就可以了,但是这样时间复杂度O(n),一下就被卡住了。这题首先要明白的是,我们只需要知道叶子节点的数目就能统计出总节点树。想法1: 既然是完全二叉树,我肯定是从左子树开始看,如果左子树不完整,右子树就不用再遍历了。由此形成一个递归的搜索过程,先搜索左子树,如果... 阅读全文
posted @ 2015-08-07 21:22 sfesly 阅读(373) 评论(0) 推荐(0)
leetcode 229 Majority Element II
摘要:这题用到的基本算法是Boyer–Moore majority vote algorithmwiki里有示例代码 1 import java.util.*; 2 public class MajorityVote { 3 public int majorityElement(int[] num... 阅读全文
posted @ 2015-08-05 20:11 sfesly 阅读(203) 评论(0) 推荐(0)
leetcode 233 Number of Digit One
摘要:这题属于需要找规律的题。先想一下最简单的情形:N = 10^n - 1记X[i]表示从1到10^i - 1中 1的个数,则有如下递推公式:X[i] = 10 * X[i - 1] + 10^(i - 1)这个递推公式可以这么观察得到:i =0,X[0] = 0i = 1,从1到9, X[1]= 1i... 阅读全文
posted @ 2015-08-04 09:58 sfesly 阅读(186) 评论(0) 推荐(0)
leetcode 238 Product of Array Except Self
摘要:这题看似简单,不过两个要求很有意思:1、不准用除法:最开始我想到的做法是全部乘起来,一项项除,可是中间要是有个0,这做法死得很惨。2、空间复杂度O(1):题目说明了返回的那个数组不算进复杂度分析里面做法:既然不用除法,对于某个数i, result[i] = 0到i - 1的乘积 X i + 1... 阅读全文
posted @ 2015-08-02 18:47 sfesly 阅读(196) 评论(0) 推荐(0)
leetcode 239 Sliding Window Maximum
摘要:这题是典型的堆排序算法,只是比一般的堆算法多了删除的操作,有两件事需要做:1 用一个hash表存储从输入数组索引到堆数组(用于实现堆的那个数组)所以的映射,以便在需要删除一个元素的时候能迅速定位到堆数组中的位置2用一个set保存已经被删除的元素索引(这里指的是输入数组索引),这一点可选;还有一种做法... 阅读全文
posted @ 2015-08-02 09:23 sfesly 阅读(219) 评论(0) 推荐(0)
KMP算法
摘要:对于KMP算法,最重要的是要把握其中的next数组的含义及求法考虑一个模式字符串:b1b2...bn,定义next[s]如下:next[s] is the longest proper prefix of b1b2...bs that is also a suffix of b1b2...bs#in... 阅读全文
posted @ 2015-05-06 20:17 sfesly 阅读(162) 评论(0) 推荐(0)
算法导论 第六章 思考题6-3 Young氏矩阵
摘要:这题利用二叉堆维持堆性质的办法来维持Young氏矩阵的性质,题目提示中写得很清楚,不过确实容易转不过弯来。a,b两问很简单。直接看c小问:按照Young氏矩阵的性质,最小值肯定在左上角取得,问题在于取出最小值后如何保持矩阵的性质。可以参照max_heapify中的做法,先取出最小值,然后将矩阵左上角... 阅读全文
posted @ 2014-08-31 16:56 sfesly 阅读(465) 评论(0) 推荐(0)
算法导论 第六章 思考题 6-3 d叉堆
摘要:d叉堆的实现相对于二叉堆变化不大,首先看它如何用数组表示。考虑一个索引从1开始的数组,一个结点i最多可以有d个子结点,编号从id - (d - 2) 到 id + 1。从而可以知道一个结点i的父结点计算方法为: (i + d - 2) / d。第二个问题是 一个含有n个元素的d叉堆的高度,就是一个简... 阅读全文
posted @ 2014-08-31 11:07 sfesly 阅读(558) 评论(0) 推荐(0)
算法导论 第六章 思考题 6-1 用插入的方法建堆
摘要:BUILD-MAX-HEAP'(A) heap-size[A]<-1 for i <- 2 to length[A] do MAX-HEAP-INSERT(A, A[i])如上,题目给出一种使用插入的办法建堆的算法,而书中6.4节给出的建堆算法如下:BUILD-MAX-HE... 阅读全文
posted @ 2014-08-31 09:35 sfesly 阅读(1034) 评论(0) 推荐(1)
 

公告


博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3