算法
文章平均质量分 84
ZoeLandia
记录学习之路
展开
-
实现快速排序所踩的坑
实现快速排序所踩的坑原创 2024-03-16 22:42:26 · 219 阅读 · 0 评论 -
蓝桥杯算法训练---印章
印章题目:共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。样例输入n和m:2 3样例输出(保留四位小数:0.7500数据规模和约定:1≤n,m≤20解题思路:p = 1/n.动规步骤:dp定义:dp[i] [j] : i张印章凑齐j种印章数的概率。递推公式:i < j : 不可能凑齐,dp[i] [j] = 0j = 1时(只需要凑齐一种即可,n种里面的随意一种:i = 1时,dp[i] [j] = 1;i > 1时,每个图案原创 2022-04-08 20:24:48 · 2309 阅读 · 4 评论 -
相关算法---贪心算法
贪心算法1. 理论基础贪心的本质就是选择每一阶段的局部最优,从而达到全局最优。使用贪心最好的策略就是举反例,如果想不到反例,就试一试贪心。刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。贪心的解题步骤:将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解2. 分发饼干题目:假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[原创 2022-03-22 18:02:04 · 1533 阅读 · 0 评论 -
相关算法---动态规划
动态规划1. 理论基础动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。动态规划解题步骤:1.确定dp数组(dp table)以及下标的含义(一些情况是递推公式决定了dp数组要如何初始化2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组动态规划如何找出bug:最好的方式就是原创 2022-03-22 17:55:51 · 582 阅读 · 0 评论 -
相关算法---回溯算法
回溯算法1. 理论基础回溯函数就是递归函数,指的是一个函数。回溯法解决的问题:组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等回溯法解决的问题都可以抽象为树形结构。因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度就是构成的树的深度。回溯法的模板:习惯是函数起名字为backtracki原创 2022-03-18 21:06:57 · 773 阅读 · 0 评论 -
相关算法---二叉树
二叉树1. 理论知识重要形式满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。二叉搜索树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值它的左、右子树也分别为二叉排序树平衡二叉树:一棵空树或它的左右两个子树的高度差的绝对原创 2022-03-18 21:00:49 · 893 阅读 · 0 评论 -
相关算法---栈与队列
栈与队列1. 理论基础队列先进先出,栈先进后出。栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能)。2. 用栈实现队列题目:使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。说明:只能使用标准的栈操作 。你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队原创 2022-03-17 13:35:08 · 592 阅读 · 0 评论 -
相关算法---字符串
字符串1. 反转字符串题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。题目分析:可以直接使用现成的函数;但也有简单进行实现。class Solution { public void reverseString(char[] s) { int l = 0; int r = s.length - 1; //前后元原创 2022-03-16 22:02:25 · 529 阅读 · 0 评论 -
相关算法---哈希表
哈希表1.理论基础哈希表是根据关键码的值直接进行访问的数据结构。(数组其实就是一个简单的哈希表一般哈希表都是用来快速判断一个元素是否出现在集合里的。常见的三种哈希结构:数组set(集合)map(映射)2. 有效的字母异位词题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。说明:你可以假设字符串只包含小写字母。题目分析:定义一个record数组存放26个字母,遍历s的字符+1,遍历t的字符-1,看最后record的值是否全为0,是则返回true,否则原创 2022-03-15 14:41:43 · 1489 阅读 · 0 评论 -
相关算法---链表
链表1. 理论基础链表就是指针串联在一起的线性结构,每个节点有数据域和指针域。链接的入口节点称为链表的头结点也就是head。链表的类型:单链表双链表:每个节点都有两个指针域,一个指向下一个节点,一个指向上一个节点。向前、后都可以查询。循环链表:链表首尾相连。(可以解决约瑟夫环问题链表在内存中不是连续分布的。定义链表节点方式(做题会给出,但是自己要会写public class ListNode { int val; ListNode next; Lis原创 2022-03-15 11:04:54 · 832 阅读 · 0 评论 -
相关算法---数组
数组1. 理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的,内存空间的地址是连续的。因而在删除或者增添元素的时候,难免会移动其他元素的地址。数组的元素是不能删的,只能覆盖。2. 二分查找题目:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。题目分析:有序数组;数组中无重复元素。(很适合二分查找class Solution { publ原创 2022-03-14 13:26:49 · 678 阅读 · 0 评论