![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 76
骑猪去兜风..
无
展开
-
算法导论第十二章总结以及课后题答案
二叉搜索树总结查找二叉搜索树中最大关键字元素TREE-MAXIMUM(x) while x.right!=NIL x=x.right return x查找二叉搜索树中最小关键字元素TREE-MINIMUM(x) while x.left!=NIL x=x.left return x插入一个结点到二叉树TREE-INSERT(T,z原创 2018-03-07 13:48:11 · 3600 阅读 · 0 评论 -
栈、队列系列
目录剑指Offer(9)--用两个栈实现队列(用两个队列实现栈)剑指Offer(30)--包含min函数的栈剑指Offer(31)--栈的压入、弹出序列剑指Offer(59)--队列的最大值用数据结构模拟浏览器前进后退的操作剑指Offer(9)--用两个栈实现队列(用两个队列实现栈)思路:当需要输出的时候,如果pop栈中有数据就直接输出栈顶元素,如果没...原创 2018-11-05 18:42:54 · 218 阅读 · 0 评论 -
常见排序算法汇总(C++实现)
目录插入排序冒泡排序快速排序(普通版AND改进版)简单选择排序堆排序二路归并排序希尔排序基数排序排序算法分析Hash表的实现(拉链法)单链表排序快速排序二分查找外部归并排序法插入排序#include<iostream>using namespace std;/*插入排序的细节讲解与复杂度分析时间复杂度O(N ^...原创 2018-11-08 21:23:31 · 384 阅读 · 0 评论 -
C++实现缓存算法LRU和LFU
LRU的实现运用你所掌握的数据结构,设计和实现一个LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据get和 写入数据put。获取数据get(key)- 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据put(key, value)- 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除...原创 2018-12-05 17:12:01 · 1334 阅读 · 0 评论 -
牛客算法进阶(一)
一、窗口应用生成窗口最大值数组给出一个整形数组,例如arr = {5,4,3,5,6,7,6},窗口大小为w=3,窗口每次向右移动一位,输出每个窗口中最大值组成的数组。[5,4,3,]5,6,7,6 窗口最大值为55,[4,3,5,]6,7,6 窗口最大值为55,4,[3,5,6,]7,6 窗口最大值为65,4,3,[5,6,7,]6 窗口最大值为75,4,3,5,[6...原创 2018-12-18 20:47:08 · 3123 阅读 · 0 评论 -
从暴力递归到动态规划
动态规划什么是动态规划方法?1.其本质是利用申请的空间来记录每一个暴力搜索的结果,下次要用结果的时候就可以直接使用,而不需要在进行重复的递归过程。2.动态规划规定每一种递归状态的计算顺序,依次进行计算。1.动态规划算法是从暴力搜索算法优化过来的,如果我们不清楚暴力搜索的过程,就难以理解动态规划的实现,当我们了解了动态规划算法的基本原理的文字概述,实现条件之后,这时可能并不是太理...原创 2018-12-09 16:01:31 · 591 阅读 · 1 评论 -
树
目录树的先序、中序、后序、层次遍历代码求二叉树的宽度输出二叉树每一层的最右节点二叉排序树转换成有序双向链表二叉搜索树的查找、插入、删除二叉树的最大距离(即相距最远的两个叶子节点)赫夫曼编码赫夫曼树的一个重要应用是赫夫曼编码。这里的编码是将要传送的文字转换为二进制的字符串(由0和1组成的字符串)。根据给定字符串权值求赫夫曼编码的过程,实际上就是根据给定权值构...原创 2019-03-03 21:22:28 · 309 阅读 · 0 评论 -
递归、循环、位运算
目录剑指Offer(10)--斐波那契数列(青蛙跳台阶)剑指Offer(11)--旋转数组的最小数字剑指Offer(12)--矩阵中的路径剑指Offer(13)--机器人的运动范围剑指Offer(14)--剪绳子剑指Offer(15)--二进制中1的个数剑指Offer(17)--打印从1到最大的n位数剑指Offer(47)--礼物的最大价值剑指Offer...原创 2019-03-26 14:45:18 · 273 阅读 · 0 评论 -
杂乱算法题
目录剑指Offer(15)--二进制中1的个数剑指Offer(41)--数据流中的中位数剑指Offer(49)--丑数剑指Offer(65)--不用加减乘除做加法剑指Offer(15)--二进制中1的个数题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。#include<iostream>using namespace std;/...原创 2019-03-23 17:49:49 · 233 阅读 · 0 评论 -
dfs系列
组合总和给定一个无重复元素的数组candidates和一个目标数target,找出candidates中所有可以使数字和为target的组合。candidates中的数字可以无限制重复被选取。说明:所有数字(包括target)都是正整数。解集不能包含重复的组合。示例1:输入: candidates = [2,3,6,7], target = 7,所...原创 2019-06-19 18:42:22 · 273 阅读 · 0 评论 -
字符串系列
目录剑指Offer(5)--替换空格剑指Offer(19)--正则表达式匹配剑指Offer(20)--表示数值的字符串剑指Offer(38)--字符串的排列打印一个字符串的全部子序列,包括空字符串剑指Offer(46)--把数字翻译成字符串剑指Offer(48)--最长不重复字符的子字符串剑指Offer(58)--翻转字符串和左旋转字符串剑指O...原创 2018-11-05 14:20:45 · 280 阅读 · 1 评论 -
二叉树系列
涉及到二叉树的题,大部分是利用递归求解,因为二叉树这种结构看不见、摸不着,只能交给程序一层一层跑,而且主要是因为结构相同。递归求解,最主要的就是要考虑好终止的条件。目录剑指Offer(7)--重建二叉树剑指Offer(8)--二叉树的下一个节点剑指Offer(26)--树的子结构剑指Offer(27)--二叉树的镜像剑指Offer(28)--对称的二叉树剑指Off...原创 2018-11-02 12:48:40 · 288 阅读 · 0 评论 -
算法导论第十章总结以及课后题答案
基本数据结构总结都是些基础知识课后题答案10.1-6 说明如何用两个栈实现一个队列,并分析相关队列操作的运行时间。假定S1和S2是两个栈,Q是一个队列。ENQUEUE operation:ENQUEUE(Q,x) //x是要插入队列的元素 PUSH(S1,x)就相当于在栈中插入元素,所以时间复杂度为O(1)。DEQUEUE operationDE原创 2018-03-05 20:48:58 · 2278 阅读 · 0 评论 -
最大子数组问题
分治策略简单地来说,就是递归地求解一个问题,在每层递归中应用如下三个步骤:分解:将问题划分为一些子问题。子问题的形式与原问题一样,只是规模更小。解决:递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。合并:将子问题的解组合为原问题的解。注意:有时,除了与原问题形式完全一样的规模更小的子问题外,还需要求解与原问题不完全一样的子问题。此时,将这些子问题的求解看作合并原创 2018-04-18 15:21:24 · 327 阅读 · 0 评论 -
加一问题求解
问题描述:给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。可以假设整数不包含任何前导零,除了数字0本身。输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例:输入:[1,2,3]输出:[1,2,4]解释:输入数组表示数字123,输出数组原创 2018-04-18 19:07:10 · 460 阅读 · 0 评论 -
旋转数组问题求解
旋转数组将包含 n 个元素的数组向右旋转 k 步。例如,如果 n = 7 , k = 3,给定数组[1,2,3,4,5,6,7],向右旋转后的结果[5,6,7,1,2,3,4]。解法一: 可以每次将数组中的元素右移一位,循环K次。由于向右旋转位数k可能大于数组元素个数n,所以通用的规律是:右移位数k=k%n。序列跟右移K位的结果是一样的。进而可得出一条通用的规律:右移K原创 2018-04-18 18:07:41 · 1078 阅读 · 0 评论 -
LeetCode中移动零问题解决
移动0问题描述:给定一个数组 nums, 编写一个函数将所有 0 移动到它的末尾,同时保持非零元素的相对顺序。例如, 定义 nums = [0, 1, 0, 3, 12],调用函数之后, nums 应为 [1, 3, 12, 0, 0]。注意事项:必须在原数组上操作,不要为一个新数组分配额外空间。尽量减少操作总数。void moveZeroes(vect原创 2018-04-18 19:42:28 · 449 阅读 · 0 评论 -
反转字符串
反转字符串问题描述:请编写一个函数,其功能是将输入的字符串反转过来。示例:输入:s = "hello"返回:"olleh"string reverseString(string &s) { size_t len = s.size(); auto c1 = s.begin(); auto c2 = s.end()-1; for (; c1 != s.begin(原创 2018-04-18 20:02:03 · 377 阅读 · 0 评论 -
最长公共前缀
查找字符串数组中的最长公共前缀给n个字符串,求出他们的最长公共前缀(LCP)举例:s1="abc";s2="abke"s3=abbf;则最长公共前缀s=ab;string longestCommonPrefix(vector &strs) { if (strs.size() == 0) return ""; string res = strs[0];原创 2018-04-18 20:30:32 · 639 阅读 · 0 评论 -
动态规划算法(一)
动态规划与分治算法的联系与区别动态规划与分治方法相似,均是通过子问题的解求解原问题。区别是分治算法在求解子问题时会做许多不必要的工作,它会反复求解那些公共子问题;而动态规划算法对每个子子问题都只求解一次,将其解保存在一个表格中,从而无需每次求解子子问题时都重新计算,避免了不必要的计算工作。应用动态规划来解决一个具体的例子钢条切割问题:给定一段长度为n英寸的钢条和一个价格表Pi(i=1,原创 2018-03-11 18:15:49 · 361 阅读 · 0 评论 -
动态规划应用之爬楼梯
问题描述:假设你正在爬楼梯。需要 n 步你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 步 + 1 步2. 2 步示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 步 + 1 步 + 1 步2. 1 步 + 2 步...原创 2018-04-20 14:09:59 · 490 阅读 · 0 评论 -
合并两个有效数组
问题描述:给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...原创 2018-04-20 15:13:15 · 535 阅读 · 0 评论 -
链表系列
目录剑指Offer(6)--从尾到头打印链表剑指Offer(22)--链表中倒数第k个节点剑指Offer(24)--反转链表剑指Offer(25)--合并两个排序的链表剑指Offer(35)--复杂链表的复制剑指Offer(23)--链表中环的入口节点剑指Offer(52)--两个链表的第一个公共节点剑指Offer(18)--删除有序链表中重复的节点剑指...原创 2018-10-31 20:12:55 · 322 阅读 · 1 评论 -
数组系列
目录剑指Offer(3)--数组中重复的数字剑指Offer(4)--二维数组中的查找剑指Offer(16)--数值的整数次方剑指Offer(21)--调整数组顺序使奇数位于偶数前面剑指Offer(29)--顺时针打印矩阵剑指Offer(39)--数组中出现次数超过一半的数字剑指Offer(40)--最小的k个数剑指Offer(42)--连续子数组的最大和剑...原创 2018-11-01 19:33:10 · 370 阅读 · 0 评论