算法学习
文章平均质量分 85
Hilbob
I will try anything once
展开
-
Python随便刷刷
1.九宫幻方题目描述小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将 1~9 不重复的填入一个 3*3 的矩阵当中,使得每一行、每一列和每一条对角线的和都是相同的。三阶幻方又被称作九宫格,在小学奥数里有一句非常有名的口诀:“二四为肩,六八为足,左三右七,戴九履一,五居其中”,通过这样的一句口诀就能够非常完美的构造出一个九宫格来。4 9 23 5 78 1 6有意思的是,所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备原创 2022-03-16 22:15:15 · 1199 阅读 · 0 评论 -
Leetcode刷题:二分法
用到二分法的题将在此处更新。文章目录笔记相关题目704. 二分查找笔记二分法的关键是对区间的定义,在循环中要始终坚持根据查找区间的定义来做边界处理,这个我也在学习中。相关题目704. 二分查找链接:https://leetcode-cn.com/problems/binary-search/题目描述:*解题思路定义 target 是在一个在左闭右闭的区间里,也就是[left, right](这个很重要非常重要,当然也可以定义[left, right),但是区间的定义决定原创 2021-10-24 14:10:10 · 124 阅读 · 0 评论 -
LeetCode刷题:数据结构篇(Java|C++实现)
用到一些典型数据结构的题将在此处更新。文章目录一、哈希表笔记相关题目1. 两数之和二、栈笔记相关题目20.有效括号一、哈希表笔记1.什么是哈希表哈希表离不开哈希函数,哈希函数就是根据key计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表。2.哈希函数构造方法(1)直接定址法取关键字或关键字的某个线性函数值为哈希地址。即H(key)=key 或 H(key)=a*key+b (a,b为常数)。(2)数字分析法若关键字是以R为基的数(如:以10为基的十进制数),并且哈希原创 2021-08-21 18:02:58 · 232 阅读 · 0 评论 -
DP经典回顾:背包问题
在学习动态规划,但是老是把控不住状态的定义和状态方程的转移,因此复习下背包问题,希望能有所提升。先记录下常用的几种类型吧,后面再慢慢记录学习。文章目录01背包完全背包多重背包待续...01背包问题描述有 N 件物品和一个容量为 V 的背包。放入第 i 件物品耗费的费用是 Ci,得到的价值是 Wi。求解将哪些物品装入背包可使价值总和最大。问题分析01背包的特点是:每种物品仅有一件,可以选择放或不放。定义状态:dp[i, v] 表示前 i 件物品恰放入一个容量为 v 的背包可以获得原创 2021-08-11 20:36:08 · 329 阅读 · 0 评论 -
LeetCode刷题:动态规划(Java|C++实现)
动态规划类型题转帖,持续更新~文章目录笔记练习题目91. 解码方法322. 零钱兑换笔记动态规划(dynamic-programming)大概意思就是先将一件事情分成若干阶段,然后通过阶段之间的转移达到目标。由于转移的方向通常是多个,因此这个时候就需要决策选择具体哪一个转移方向。动态规划所要解决的事情通常是完成一个具体的目标,而这个目标往往是最优解。且:阶段之间可以进行转移(动态)。达到一个可行解(目标阶段) 需要不断地转移,通过设计合适的转移达到最优解(规划)。动态规划和查表递归有很原创 2021-08-09 21:19:51 · 454 阅读 · 0 评论 -
LeetCode刷题:矩阵快速幂
有关矩阵快速幂的题都记录在此,持续更新~文章目录笔记1137.第N个泰波那契数笔记矩阵快速幂原理:如果现在要算X8一般思路:即XXXXXXXX一个一个往上面乘,则乘法运算进行7次。换个思路:采用(XX)(XX)(XX)(XX)这种求法,先进行乘法得X2,然后对X2再执行三次乘法,这样乘法运算执行4次。已经比七次要少。快速幂思路:快速幂思路和上一个思路类似,就是划分乘法,使得总乘法次数尽可能少所。现在要考虑应该怎么分让计算比较快。快速幂采用的则是二进制的加权划分方法:例如计算X19次方原创 2021-08-08 19:37:31 · 487 阅读 · 0 评论 -
LeetCode刷题:滑动窗口(Java|C++实现)
有关滑动窗口类型的题目都记录在此~持续更新文章目录笔记练习题目209. 长度最小的子数组笔记滑动窗口算法广泛应用于网络协议等,滑动窗口算法是一种思路,可以解决很多问题,比较适合滑动窗口解决的问题通常是题目要求连续的情况。滑动窗口主要用来处理连续问题。比如题目求解“连续子串 xxxx”,“连续子数组 xxxx”,就应该可以想到滑动窗口。能不能解决另说,但是这种敏感性还是要有的。类型主要有:固定窗口大小窗口大小不固定,求解最大的满足条件的窗口窗口大小不固定,求解最小的满足条件的窗口(上面的原创 2021-08-08 12:00:54 · 230 阅读 · 0 评论 -
LeetCode刷题:字符串(Java|C++实现)
有关字符串类型的题目都会总结记录在此,方便自己日后查看。1002.查找常用字符题目链接:https://leetcode-cn.com/problems/find-common-characters题目描述:给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。个人解题思路:个人的一般思路(不得不说官方还是巧妙的很),原创 2021-08-07 16:05:16 · 2539 阅读 · 3 评论 -
Java实现元素的全排列和选择排列
使用递归算法简单实现元素的全排列和选择排列(组合)该算法可以指定各元素的使用次数public class 选择排列 { static char[] yu= {'a','b','c','d','e'}; static int [] num= {1,1,1,1,1}; static void dfs0(int step, int n,String s) { //从m个元素选择n个,并考虑顺序 if (step==n) {//num元素之和 System.out.println(s);原创 2020-10-30 22:23:32 · 411 阅读 · 3 评论 -
JAVA:二分练习——历届试题《区间位移》
一、问题描述数轴上有n个闭区间D1,…,Dn。其中区间Di用一对整数[ai, bi]来描述,满足ai <bi。已知这些区间的长度之和至少有10000。所以,通过适当的移动这些区间,你总可以使得他们的“并”覆盖[0,10000]——也就是说[0, 10000]这个区间内的每一个点都落于至少一个区间内。你希望找一个移动方法,使得位移差最大的那个区间的位移量最小。具体来说,假设你将Di移动到[ai+ci,bi+ci]这个位置。你希望使得maxi|ci|最小。二、输入格式输入的第一行包含一个原创 2021-07-21 12:22:45 · 180 阅读 · 0 评论 -
JAVA:并查集实战——历届试题《城市建设》
在练习算法,有点心得,记录下。一、问题描述栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路来连接其中的一些地点,每条道路可以连接其中的两个地点。另外由于C市有一条河从中穿过,也可以在其中的一些地点建设码头,所有建了码头的地点可以通过河道连接。栋栋拿到了允许建设的道路的信息,包括每条可以建设的道路的花费,以及哪些地点可以建设码头和建设码头的花费。市长希原创 2021-07-20 20:47:50 · 167 阅读 · 0 评论