算法
keeper42
Just do one thing and do it well! 要么别做,要做就做到最好!
展开
-
【leetcode】39. 组合总和
leetcode原创 2022-03-13 05:57:42 · 68 阅读 · 0 评论 -
【leetcode】8. 字符串转整型
Talk is cheap, show you my code. public int myAtoi(String s) { char[] chars = s.toCharArray(); int len = chars.length; int i = 0; while (i < len && chars[i] == ' ') { i++; } if..原创 2022-03-04 15:41:14 · 111 阅读 · 0 评论 -
【leetcode】7. 整数反转
Talk is cheap, show you my code.public int reverse(int x) { StringBuffer res = new StringBuffer(); String xstr = String.valueOf(x); int xstrlen = xstr.length(); char minus = '-'; if (xstr.charAt(0) == minus) {原创 2022-03-04 15:24:39 · 43 阅读 · 0 评论 -
【leetcode】6. Z字形变换
Talk is cheap, show you my code. public String convert(String s, int numRows) { if (s.length() == 0) { return null; } if (s.length() == 1 || s.length() == 2) { return s; } if (numRows原创 2022-03-04 15:21:32 · 48 阅读 · 0 评论 -
【leetcode】5. 最长回文子串
Talk is cheap, show you my code.class Solution { public String longestPalindrome(String s) { if (s == null || s.length() == 0) { return ""; } int[] pos = new int[]{0,0}; char[] str = s.toCharArray(); .原创 2022-03-04 14:14:36 · 99 阅读 · 0 评论 -
【leetcode】3. 无重复字符的最长子串
Talk is cheap, show you my code.class Solution { public int lengthOfLongestSubstring(String s) { if (s.isEmpty()) { return 0; } List<Integer> sizeList = new ArrayList<>(); for (int i = 0; i &l.原创 2022-03-04 08:54:57 · 44 阅读 · 0 评论 -
【leetcode】2. 两数相加
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } *...原创 2022-03-04 08:52:23 · 42 阅读 · 0 评论 -
【程序员代码面试指南】递归解决汉诺塔问题
Talk is cheap,show you my code.import java.util.Scanner;/** * @version 1.0 * @date 2022/2/23 * Towers of Hannoi Problem */public class HannoiTowers { public static void main(String[] args) { System.out.println("请输入盘子数:"); Sc.原创 2022-03-03 11:10:32 · 139 阅读 · 0 评论 -
【程序员代码面试指南】非递归的方法先序遍历二叉树
Talk is cheap, show you my code.import java.util.Stack;/** * @version 1.0 * @date 2022/3/3 * @from 《Coding Interview Guide》 Page90 * Traversal binary tree by using stack. */public class TraversalBinaryTree { public class Node { pu.原创 2022-03-03 10:58:13 · 235 阅读 · 0 评论 -
【程序员代码面试指南】生成窗口最大值数组
Talk is cheap, show you my code.import java.util.ArrayList;import java.util.Comparator;import java.util.List;/** * @version 1.0 * @date 2022/2/26 * @from 《Coding Interview Guide》 Page19 * <p> * input: a slide window size and an integer .原创 2022-03-03 10:53:50 · 264 阅读 · 0 评论 -
【程序员代码面试指南】环形单链表的约瑟夫问题
【程序员代码面试指南】环形单链表的约瑟夫问题原创 2022-02-28 03:10:14 · 6546 阅读 · 0 评论 -
【重学算法】B树与B+树
B树B树也称B-树,它是一棵多路平衡查找树。B 树其实就是一棵每个节点的子节点个数不能小于 m/2 的 m 叉树。B树的定义如下:每个节点最多有m-1个关键字(可以存有的键值对)。 根节点最少可以只有1个关键字。 非根节点至少有m/2个关键字。 每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。 所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同。 每个节点都存有索引和数据,也就是对应的key和value。描原创 2021-05-17 14:02:51 · 1241 阅读 · 0 评论 -
【重学算法】跳表、位图与布隆过滤器
2021.05.12学习于极客时间[https://time.geekbang.org/column/article/76827]位图位图是通过将数组下标与应用中的一些值关联映射,数组中该下标所指定的位置上的元素可以用来标识值的情况。位图代码public class BitMap { // Java中char类型占2个字节,即16bit private char[] bytes; private int nbits; public BitMap(int nbits)原创 2021-05-13 10:40:34 · 149 阅读 · 0 评论 -
【重学算法】最短路径算法:Dijkstra与Prim
2021.05.11学习于极客时间 [https://time.geekbang.org/column/article/76468]我们用 vertexes 数组,记录从起始顶点到每个顶点的距离(dist)。起初,我们把所有顶点的 dist 都初始化为无穷大(也就是代码中的 Integer.MAX_VALUE)。我们把起始顶点的 dist 值初始化为 0,然后将其放到优先级队列中。我们从优先级队列中取出 dist 最小的顶点 minVertex,然后考察这个顶点可达的所有顶点(代码中的 ne原创 2021-05-13 10:39:21 · 221 阅读 · 0 评论 -
【重学算法】拓扑排序
拓扑排序本身就是基于有向无环图的一个算法,使用拓扑排序可以解决编译依赖问题,然而不能解决存在环像 a->b->c->a 这样的循环依赖问题。1. Kahn先从图中找出一个入度为 0 的顶点,将其输出到拓扑排序的结果序列中(对应代码中就是把它打印出来),并且把这个顶点从图中删除(也就是把这个顶点可达的顶点的入度都减 1)。我们循环执行上面的过程,直到所有的顶点都被输出。最后输出的序列,就是满足局部依赖关系的拓扑排序。使用Kahn算法实现拓扑排序的Java代码实现:publi原创 2021-04-29 16:45:24 · 144 阅读 · 0 评论 -
【重学算法】堆排序
1. 堆的定义堆是一个近似完全二叉树的结构,堆中子节点的值总是小于(或者大于)它的父节点。通常堆是通过一维数组来实现的。在数组起始位置为0的情形中:父节点i的左子节点在位置(2i+1);父节点i的右子节点在位置(2i+2);子节点i的父节点在位置((i-1)/2);以升序排序为例,建最大堆,重复从最大堆取出数值最大的结点(把根结点和最后一个结点交换,把交换后的最后一个结点移出堆(最大值在最后)),并让残余的堆维持最大堆性质。2. 堆排序的Java代码实现 public原创 2021-04-29 11:56:47 · 72 阅读 · 0 评论 -
【重学算法】快速排序
1. 快速排序的动态图2. 快速排序的伪代码// 快速排序,A是数组,n表示数组的大小quick_sort(A, n) { quick_sort_c(A, 0, n-1)}// 快速排序递归函数,p,r为下标quick_sort_c(A, p, r) { if p >= r then return q = partition(A, p, r) // 获取分区点 quick_sort_c(A, p, q-1) quick_sort_c(A, q+1, r)}原创 2021-04-29 11:55:34 · 228 阅读 · 0 评论 -
【重学算法】红黑树
1. Red-Black Tree红黑树,Red-Black Tree,是一种自平衡二叉查找树,被称为“对称二叉B树”。它可以在O(logn)时间内完成查找、插入和删除,这里的n是树中元素的数目。红黑树中的节点,一类被标记为黑色,一类被标记为红色。除此之外,一棵红黑树还需要满足这样几个要求:(1) 根节点是黑色的;(2) 每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存储数据;(3) 任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的;(4) 从任一节原创 2021-04-26 10:27:58 · 78 阅读 · 0 评论 -
【重学算法】散列冲突及解决方案
散列冲突对于散列表而言,无论设置的存储区域(n)有多大,当需要存储的数据大于 n 时, 那么必然会存在哈希值相同的情况。这就是所谓的散列冲突。一般解决散列冲突的方法有开放寻址法与链表法。开放寻址法定义:将散列函数扩展定义成探查序列,即每个关键字有一个探查序列h(k,0)、h(k,1)、…、h(k,m-1),这个探查序列一定是0….m-1的一个排列(一定要包含散列表全部的下标,不然可能会发生虽然散列表没满,但是元素不能插入的情况),如果给定一个关键字k,首先会看h(k,0)是否为空,如果为空,则插入;原创 2021-04-25 09:50:41 · 2082 阅读 · 0 评论 -
leetcode(4)——罗马数字转整数
题目描述:罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。12 写做XII,即为X+II。 27 写做XXVII, 即为XX+V+I...原创 2020-09-02 17:30:36 · 105 阅读 · 0 评论 -
leetcode(3)——回文数
leetcode(3)原创 2020-08-09 23:53:19 · 65 阅读 · 0 评论 -
leetcode(2)——整数反转
leetcode(2)原创 2020-08-08 21:50:21 · 85 阅读 · 0 评论 -
leetcode(1)——两数之和
leetcode(1)原创 2020-08-07 23:57:52 · 640 阅读 · 0 评论 -
刷CCF的算法题(第二天)
试题名称:工资计算时间限制:1.0s内存限制:256.0MB问题描述:问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资。假设他一个月的税前工资(扣除五险一金后、未扣税前的工资)为S元,则他应交的个人所得税按如下公式计算: 1) 个人所得税起征点为3500元,若S不超过350原创 2017-08-17 23:48:09 · 380 阅读 · 0 评论 -
刷CCF的算法题(第三天)
试题编号:201609-2试题名称:火车购票时间限制:1.0s内存限制:256.0MB问题描述:问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二原创 2017-08-18 23:11:19 · 1187 阅读 · 0 评论 -
刷CCF算法题(第四天)
试题编号:201609-2试题名称:火车购票时间限制:1.0s内存限制:256.0MB问题描述:问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配。 假设一节车厢有20排、每一排5个座位。为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二原创 2017-08-20 00:44:15 · 378 阅读 · 0 评论 -
刷CCF的算法题(第五天)
问题描述试题编号:201703-2试题名称:学生排队时间限制:1.0s内存限制:256.0MB问题描述:问题描述 体育老师小明要将自己班上的学生按顺序排队。他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整。一次调整小明可能让一位同学出队,原创 2017-08-21 00:16:29 · 338 阅读 · 0 评论 -
刷CCF的算法题(第七天)
问题描述试题编号:201604-1试题名称:折点计数时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定n个整数表示一个商店连续n天的销售量。如果某天之前销售量在增长,而后一天销售量减少,则称这一天为折点,反过来如果之前销售量减少而后一天销售量增长,也原创 2017-08-23 00:27:47 · 526 阅读 · 0 评论 -
刷CCF的算法题(第八天)
问题描述试题编号:201512-1试题名称:数位之和时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定一个十进制整数n,输出n的各位数字之和。输入格式 输入一个整数n。输出格式 输出一个整数,表示答案。样例输入2015原创 2017-08-24 07:45:43 · 252 阅读 · 0 评论 -
刷CCF的算法题(第十天)
问题描述试题编号:201509-2试题名称:日期计算时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? 注意闰年的2月有29天。满足下面条件之一的是闰年: 1) 年份是4的整数倍,而且不原创 2017-08-25 10:04:16 · 367 阅读 · 0 评论 -
刷CCF的算法题(第十二天)
问题描述试题编号:201703-1试题名称:分蛋糕时间限制:1.0s内存限制:256.0MB问题描述:问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, …, an。小明想分给每个朋友至少重量为k的蛋糕。小明的朋原创 2017-08-27 23:16:15 · 235 阅读 · 0 评论 -
刷CCF的算法题(第十一天)
问题描述试题编号:201509-3试题名称:模板生成系统时间限制:1.0s内存限制:256.0MB问题描述:问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom原创 2017-08-27 00:11:13 · 317 阅读 · 0 评论 -
刷CCF的算法题(第一天)
问题描述 在一个整数序列a1, a2, …, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量,则称其为中间数。在一个序列中,可能存在多个下标不相同的中间数,这些中间数的值是相同的。 给定一个整数序列,请找出这个整数序列的中间数的值。 输入格式 输入的第一行包含了一个整数n,表示整数序列中数的个数。 第二行包含n个正整数,依次表示a1, a2, …,原创 2017-08-16 23:19:42 · 776 阅读 · 0 评论 -
CCF-CSP Z字形扫描
问题描述试题编号:201412-2试题名称:Z字形扫描时间限制:2.0s内存限制:256.0MB问题描述:问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行Z字形扫描后得到长度为16的序列:...原创 2018-03-17 20:53:35 · 205 阅读 · 0 评论 -
CCF-CSP 数字排序
问题描述试题编号:201503-2试题名称:数字排序时间限制:1.0s内存限制:256.0MB问题描述:问题描述 给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。输入格式 输入的第一行包含一个整数n,表示给定数字的个数。 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。输出格式 输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按...原创 2018-03-17 21:03:11 · 1304 阅读 · 0 评论 -
简单二叉树
以下实现了二叉树的一些方法#include <iostream>#include <string>#include <queue>#include <stack>using namespace std;class BiTreeNode{public: char data; int weight; in...原创 2016-12-18 11:21:18 · 217 阅读 · 0 评论 -
CCF-CSP 除法
问题描述试题编号:201709-5试题名称:除法时间限制:10.0s内存限制:256.0MB问题描述:问题描述 小葱喜欢除法,所以他给了你N个数a1, a2, ⋯, aN,并且希望你执行M次操作,每次操作可能有以下两种: 给你三个数l, r, v,你需要将al, al+1, ⋯, ar之间所有v的倍数除以v。 给你两个数l, r,你需要回答al + al+1 + ⋯ + ar的值是多少。输入...原创 2018-03-17 22:41:45 · 525 阅读 · 0 评论 -
CCF-CSP 游戏
问题描述试题编号:201712-2试题名称:游戏时间限制:1.0s内存限制:256.0MB问题描述:问题描述 有n个小朋友围成一圈玩游戏,小朋友从1至n编号,2号小朋友坐在1号小朋友的顺时针方向,3号小朋友坐在2号小朋友的顺时针方向,……,1号小朋友坐在n号小朋友的顺时针方向。 游戏开始,从1号小朋友开始顺时针报数,接下来每个小朋友的报数是上一个小朋友报的数加1。若一个小朋友报的数为k的倍数或...原创 2018-03-17 22:37:53 · 331 阅读 · 0 评论 -
CCF-CSP JSON串查询
问题描述试题编号:201709-3试题名称:JSON查询时间限制:1.0s内存限制:256.0MB问题描述:问题描述 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,可以用来描述半结构化的数据。JSON 格式中的基本单元是值 (value),出于简化的目的本题只涉及 2 种类型的值: * 字符串 (string):字符串是由双引号 " 括起来的一...原创 2018-03-17 22:32:17 · 406 阅读 · 0 评论 -
CCF-CSP 公共钥匙盒
问题描述试题编号:201709-2试题名称:公共钥匙盒时间限制:1.0s内存限制:256.0MB问题描述:问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家。每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中。 钥匙盒一共有N个挂钩,从左到右排成一排,用来挂N个教室的钥匙。一串钥匙没有固定的悬挂位...原创 2018-03-17 21:56:36 · 266 阅读 · 1 评论