随笔分类 -  算法

摘要:一、概述 1.状态压缩 状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。 2.使用条件 从状态压缩的特点来看,这个算法适用的题目 阅读全文
posted @ 2021-08-16 18:09 snail灬 阅读(177) 评论(0) 推荐(0)
摘要:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 思路: 使用双指针,左指针指向当前已经处理好的序列的尾部, 阅读全文
posted @ 2020-11-20 00:59 snail灬 阅读(90) 评论(0) 推荐(0)
摘要:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。 必须修改,只允许使用额外常数空间。 以下是一些例子,输入位于左侧列,其相应输出位于右侧列。 1,2,3 → 1,3,2 3,2,1 → 1, 阅读全文
posted @ 2020-11-11 00:26 snail灬 阅读(87) 评论(0) 推荐(0)
摘要:给出一个无重叠的 ,按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 输入:intervals = [[1,3],[6,9]], newInterval = [2,5] 输出:[[1,5],[6,9]] 阅读全文
posted @ 2020-11-05 00:45 snail灬 阅读(76) 评论(0) 推荐(0)
摘要:让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length >= 3 在 0 < i < A.length - 1 条件下,存在 i 使得: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ... > A[A.length - 1 阅读全文
posted @ 2020-11-04 17:08 snail灬 阅读(90) 评论(0) 推荐(0)
摘要:给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 一.双集合 思路: 将两个数组分别放入两个se 阅读全文
posted @ 2020-11-02 17:43 snail灬 阅读(120) 评论(0) 推荐(0)
摘要:给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。 例如,从根到叶子节点路径1->2->3代表数字 123。 计算从根到叶子节点生成的所有数字之和。 说明: 叶子节点是指没有子节点的节点。 示例 1: 输入: [1,2,3] 1 / \ 2 3 输出: 阅读全文
posted @ 2020-10-29 23:54 snail灬 阅读(126) 评论(0) 推荐(0)
摘要:给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr = [1,2,2,1,1,3] 输出:true 解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有 阅读全文
posted @ 2020-10-28 14:36 snail灬 阅读(102) 评论(0) 推荐(0)
摘要:我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”: B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1](注意:B 可以是 阅读全文
posted @ 2020-10-25 19:29 snail灬 阅读(131) 评论(0) 推荐(0)
摘要:请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 方法一:快慢指针 思路: 1.使用快慢指针找到链表的中间点 2.反转中间点后面的链表 阅读全文
posted @ 2020-10-25 18:20 snail灬 阅读(71) 评论(0) 推荐(0)
摘要:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。 示例 1: 输入:S = "ababcbacadefegdehijhklij" 输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "de 阅读全文
posted @ 2020-10-23 00:46 snail灬 阅读(163) 评论(0) 推荐(0)
摘要:来自豆瓣网友的解决方案: 已知一个数组的大小,并且其中存在一个数,出现的频率大于50%,则称其为该数组的主元素。用一个算法找出这个数,要求其时间复杂度尽可能低。(这个问题貌似还是计算机专业的考研试题啊) 解法: 声明一个变量count = 0,声明一个常量size等于数组大小。 假设该数组的第一个元 阅读全文
posted @ 2019-12-06 17:43 snail灬 阅读(161) 评论(0) 推荐(0)
摘要:1.编一C程序,它能根据读入的数据构造有向图G,并输出G的DFS遍历序列(从V0开始), 图的输入形式为n V0 Vi0 V1 Vi1 V2 Vi2...Vi Vin 1 1( 1, 1为输入结束标记,其余的值都 =0且 它们都是整数,且100 n 0。(注:程序的可执行文件名必须是 e2.exe, 阅读全文
posted @ 2019-11-01 00:42 snail灬 阅读(154) 评论(0) 推荐(0)
摘要:1.编一C程序,它能对输入的一串整数(不多于1000个,以 9999为结束标记, 9999不参与排序), 进行冒泡排序(从小到大排序),输出排序结果和所用的关键字比较次数。 ~~~c include define END 9999 define MAX_SIZE 1005 int array[MAX 阅读全文
posted @ 2019-10-31 22:26 snail灬 阅读(157) 评论(0) 推荐(0)
摘要:1.编一C程序,它能根据输入的字符(字母或 )序列来构造一棵二叉树,并能输出该二叉树后序和中序序列, 并计算出该二叉树度数为2的节点个数。输入是该二叉树经扩充后的结点前序遍历序列,扩充方法是: 对无左孩子的结点,增加一个标记为的做孩子结点:对无右孩子的结点,增加一个标记为的右孩子结点。 例如,若要构 阅读全文
posted @ 2019-10-31 22:18 snail灬 阅读(515) 评论(0) 推荐(0)
摘要:平均查找长度: ASL=$\sum\limits _{i=1}^nP_{i}C_{i}$ 其中N为结点的个数,$P_{i}$是查找第i个结点的概率,默认情况下查找每个结点的概率是相同的, 平均查找长度可以简化为: ASL=$\tfrac 1n\sum\limits _{i=1}^nC_{i}$ 查找 阅读全文
posted @ 2019-10-25 18:56 snail灬 阅读(167) 评论(0) 推荐(0)
摘要:表示方法:树形表示法、嵌套集合表示法、凹行表示法、广义表表示法 度为0的是叶子节点或者终端节点 度不为0的是非终端节点或者分支节点或者内部节点 根节点称为开始节点 数的存储结构:双亲表示法、孩子链表法、孩子兄弟表示法 树常用遍历:前序遍历和后序遍历 森林常用遍历:前序遍历和后序遍历 前序遍历一个树等 阅读全文
posted @ 2019-10-25 18:55 snail灬 阅读(230) 评论(0) 推荐(0)
摘要:性质1 在二叉树的第i层至多有$2^{i 1}$个结点(i$\geq$1) 性质2 深度为K的二叉树至多有$2^k 1$个节点 (k$\geq$1) 二叉树的遍历 前序遍历 中序遍历 后序遍历 线索二叉树 一棵结点数目为n的二叉树,采用二叉链表的形式存储。对于每个结点均有指向左右孩子的两个指针域,而 阅读全文
posted @ 2019-10-25 18:54 snail灬 阅读(168) 评论(0) 推荐(0)
摘要:队列的基本运算:置空队列、判空队列、入队列、出队列、取队列头 顺序队列(循环队列) 置空队列 ~~~c void InitQueue(CirQueue Q){ Q front=Q rear=0; } ~~~ 判空队列 ~~~c int QueueEmpty(CirQueue Q){ return Q 阅读全文
posted @ 2019-10-25 18:53 snail灬 阅读(174) 评论(0) 推荐(0)
摘要:栈 栈主要有空栈、判栈空、判栈满、进栈、出栈、取栈顶元素六种。 顺序栈 空栈: 判栈空 ~~~c int StackEmpty(SeqStack S){ return S top== 1; } ~~~ 判栈满 ~~~c int StackFull(SeqStack S){ return S top 阅读全文
posted @ 2019-10-25 18:52 snail灬 阅读(151) 评论(0) 推荐(0)