算法
文章平均质量分 62
福尔摩东
上岸求求了
展开
-
动手学习深度学习
应用领域:图片分类、目标检测、样式迁移、人脸合成图片、文字生成图片、文字自动生成、无人驾驶。原创 2022-11-22 18:18:15 · 926 阅读 · 1 评论 -
LeetCode周赛补题
中午不想打,下午补一补[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UgG2LLq2-1642683002754)(/upload/2022/01/image-2a1076f88bfd4145b9d4fe4ee3518ceb.png)]5980. 将字符串拆分为若干长度为 k 的组简单模拟class Solution { public String[] divideString(String s, int k, char fill) { .原创 2022-01-20 20:50:18 · 622 阅读 · 0 评论 -
值域二分专题
TOCLeetCode374.猜数字大小/** * Forward declaration of guess API. * @param num your guess * @return -1 if num is lower than the guess number * 1 if num is higher than the guess number * otherwise return 0 * int guess(int n原创 2022-01-20 20:48:21 · 278 阅读 · 0 评论 -
Trie树
TOCTrie树快速存储和查找字符串集合的数据结构142. 前缀统计import java.util.*;class Main{ static int N = (int)1e6+10; static int[][]ch = new int[N][26]; static int idx = 0; static int[] end = new int[N]; public static void main(String[] args){ Sc原创 2022-01-20 20:47:41 · 188 阅读 · 0 评论 -
最长公共子串与最长公共子序列问题
TOC最长公共子串动态规划解决注意这题求的是最长公共子串,不是最长公共子序列,子序列可以是不连续的,但子串一定是连续的。定义dp[i][j]表示字符串str1中第i个字符和str2种第j个字符为最后一个元素所构成的最长公共子串。如果要求dp[i][j],也就是str1的第i个字符和str2的第j个字符为最后一个元素所构成的最长公共子串,我们首先需要判断这两个字符是否相等。如果不相等,那么他们就不能构成公共子串,也就是dp[i][j]=0;如果相等,我们还需要计算前面相等字符的个数,其实就是dp原创 2022-01-20 20:47:09 · 245 阅读 · 0 评论 -
最长上升子序列专题
TOC补充最大上升子序列和import java.util.*;class Main{ public static void main(String[]args){ Scanner sc = new Scanner(System.in); int[]dp = new int[1010]; int[]arr = new int[1010]; int n = sc.nextInt(); for(int i = 1;原创 2022-01-20 20:46:31 · 103 阅读 · 0 评论 -
AC周赛补题
ACWING 第26场周赛总结❝接下来写一下收获与总结:❞AC4076 模拟模拟题import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner&原创 2021-11-20 23:15:52 · 319 阅读 · 0 评论 -
从0写一个hash表?你懂字符串哈希吗?
重新认识Hash表1. 模拟哈希表1.1 开放寻址法1.2 拉链法2. 字符串哈希2.1 处理字符串经常用的还有KMP3. leetcode 习题 1871. 模拟哈希表1.1 开放寻址法开放寻址法- 线性探测法#include<iostream>#include<cstring>using namespace std;const int N = 2e5+10,null = 0x3f3f3f3f;int p[N];int find(int x){原创 2021-10-08 12:01:11 · 354 阅读 · 0 评论 -
连通块和连通分量,快来看
关于连通块的小技巧砍树砍树给定一棵包含 n个节点的树。你的任务是从树中删除尽可能多的边,使得剩余图形的所有连通分量都具有偶数个节点。输入格式第一行包含整数 n。接下来 n−1 行,每行包含两个整数 a,b,表示节点 a 和 b之间存在一条边。节点编号 1∼n。保证给出图形是一棵树。输出格式输出一个整数表示可以删除的最大可能边数。如果无论如何都不可能使得剩余图形的所有连通分量都具有偶数个节点,则输出 −1。数据范围前六个测试点满足,1≤n≤10。所有测试点满足,1≤n≤105,1≤a原创 2021-10-04 17:32:40 · 534 阅读 · 0 评论 -
拓扑排序求最长路
ACWING 3813#include<bits/stdc++.h>using namespace std;const int N = 3e5+10, M = 3e5+10; int h[N], ne[M], e[M],idx,d[N];char w[N];int n,m;//f[N]用来存储每个int dist[N],g[N];void add(int a, int b) // 添加一条边a->b,边权为c{ e[idx] = b, ne[idx] =原创 2021-08-30 00:12:08 · 396 阅读 · 0 评论 -
约瑟夫环and汉诺塔and摩尔投票法
约瑟夫环and汉诺塔and摩尔投票法1.汉诺塔问题2.约瑟夫环数组循环链表3.摩尔投票法1.汉诺塔问题类似于中序遍历,两次递归#include<bits/stdc++.h>using namespace std;void move(int n, char start, char goal,char temp){ if(n >= 1){ move(n-1,start,temp,goal); printf("disk%d from %c原创 2021-08-25 16:59:05 · 277 阅读 · 0 评论 -
链表题目总结
ACW34.链表环的入口结点解法一:快慢指针可以用公式来说明:a,b,c,x,y的含义同上,我们用 z 表示从 c 点顺时针走到 b 的距离。则第一次相遇时 second 所走的距离是 x+(y+z)∗n+y, n 表示圈数,同时 second走过的距离是 first的两倍,也就是 2(x+y),所以我们有 x+(y+z)∗n+y=2(x+y),所以 x=(n−1)×(y+z)+z。那么我们让 second 从 cc 点开始走,走 x 步,会恰好走到 b 点;让 first 从 a 点开始走,走 x原创 2021-08-12 12:52:51 · 181 阅读 · 0 评论 -
leetcode第253场周赛
第253场周赛5838. 检查字符串是否为数组前缀5839. 移除石子使总数最小5840. 使字符串平衡的最小交换次数5841. 找出到每个位置为止最长的有效障碍赛跑路线这次周赛较简单,一个小时写了三个题,最后一个题,忘了贪心加二分的最长公共子序列咋写了,dp的卡了,完了补了一下。5838. 检查字符串是否为数组前缀class Solution { public boolean isPrefixString(String s, String[] words) { Stri原创 2021-08-08 15:15:46 · 224 阅读 · 0 评论 -
力扣周赛5187题
5187. 收集足够苹果的最小花园周长收集足够苹果的最小花园周长给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| + |j| 个苹果。你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 ,且每条边都与两条坐标轴之一平行。给你一个整数 neededApples ,请你返回土地的 最小周长 ,使得 至少 有 neededApples 个苹果在土地 里面或者边缘上。|x| 的值定义为:如果 x >= 0 ,那么值为 x如原创 2021-08-01 15:53:05 · 180 阅读 · 0 评论 -
考研算法辅导课总结-持续更新中
这里写目录标题建议根据大标题和题号来刷题排序和进位制3375. 成绩排序3376. 成绩排序23373. 进制转换3374.进制转换2链表和日期问题66.两个链表的第一个公共节点3756.筛选链表3757.重排链表3607 打印日期3573.日期累加本篇文章适用于考研和复试上机的同学,建议去ACWING买考研算法辅导课同步刷题,上岸的c++选手贼多,我都拿的是Java写的,有些拿c++写的,简单做法和最优做法基本都有,仅供参考!!!建议根据大标题和题号来刷题排序和进位制3375. 成绩排序im原创 2021-07-07 10:31:59 · 950 阅读 · 0 评论 -
力扣第248场周赛总结
力扣第248场周赛总结LeetCode 5800. 基于排列构建数组LeetCode 5801. 消灭怪物的最大数量LeetCode 5802. 统计好数字的数目LeetCode 5803. 最长公共子路径本次周赛主要用到了基础课里的贪心,快速幂和字符串哈希LeetCode 5800. 基于排列构建数组新建数组直接代就是了,签到题class Solution { public int[] buildArray(int[] nums) { int[] ans = new i原创 2021-07-04 13:24:44 · 430 阅读 · 0 评论 -
第k小个数和第k大个数,5种方法,速看!!!
1.第k小个数地址:链接地址1.1时间复杂度O(n)1.1.1基于快排实现将k值当做物理地址的值,比如第5个数其实就是数组4的位置,第2个数就是数组1的位置每次只需要判断k在左区间还是右区间,一直递归查找k所在区间最后只剩一个数时,只会有数组[k]一个数,返回数组[k]的值就是答案描述将k值当做物理地址的值,比如第5个数其实就是数组4的位置,第2个数就是数组1的位置每次只需要判断k在左区间还是右区间,一直递归查找k所在区间最后只剩一个数时,只会有数组[k]一个数,返回数组[k]的值就原创 2021-06-22 11:47:17 · 1149 阅读 · 0 评论 -
二叉树的前中后序遍历,递归+迭代
二叉树的前中后序遍历,递归+迭代前序遍历递归迭代中序遍历递归迭代后序遍历递归迭代前序遍历递归/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * Tree原创 2021-06-18 18:06:34 · 239 阅读 · 0 评论 -
看三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]解题思路标签:数组遍历首先对数组进行排序,排序后固定一个数 nums[i]nums原创 2021-06-16 11:10:50 · 96 阅读 · 0 评论 -
力扣第245场周赛
今天的第二题得用二分加数组写,拿HashSet写不太友好呀。LeetCode 5784. 重新分配字符使所有字符串都相等本题链接这道题简单题一般就是暴力,也不会太为难你,但是不要那么老实的镇区写暴力,这道题带点贪心的意思,反正是移动,最后的结果只要每一个字符的值mod个数==0的话就返回true,否则返回false。class Solution { public boolean makeEqual(String[] words) { int[] arr = new i.原创 2021-06-13 23:51:55 · 172 阅读 · 0 评论 -
手撕LRU算法
手撕LRU算法题目解析具体实现分享手写双向链表运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓原创 2021-06-07 10:49:21 · 495 阅读 · 0 评论 -
大厂:我心里的候选人是这样的
大厂:我心里的候选人是这样的面试类型面试计算机基础知识系统设计企业文化如何准备算法面试科学刷题之“三刷”训练法科学刷题之“五步”训练法1. 理解题面2.部分实现3.有提示解答4.独立解答5.写题解入门算法总结算法面试类型面试算法考察coding,algorthm and data structure,testing软技能: problem solving efficacy (效用),communication计算机基础知识操作系统,计算机网络,常用框架等,主要考察知识储备+应用能力系统设原创 2021-06-01 11:51:27 · 159 阅读 · 1 评论 -
剑指OFFER76题,依次更新中
这里写目录标题剑指OFFER1.找出数组中重复的数字2.不修改数组找出重复的数字3. 二维数组中的查找4.替换空格5.从尾到头打印链表6.重建二叉树7.二叉树的下一个节点8.用两个栈实现队列9.斐波那契数列10.旋转数组的最小数字11.矩阵中的路径12.机器人的运动范围13.剪绳子剑指OFFER1.找出数组中重复的数字class Solution { public int duplicateInArray(int[] nums) { int len = nums.leng原创 2021-05-30 23:40:02 · 243 阅读 · 1 评论 -
经典前缀积和经典前缀和的故事
经典例题前缀积乘积数量K倍区间前缀积乘积数量前缀积:s0 = 1;sn = s1 * s2 * s3 *… *sn;[i,i] = s[i]/s[i-1][i-1,i] = s[i] / s[i-2][1,i] = s[i]/s[0]因此在顾名思义,我们可以用一个前缀积数组,来判断一个区间 [sl,sr][sl,sr] 的乘积的正负数同样我们不需要完全模拟出前缀的乘积,也只需维护正负号的数量关系,原因同之前一样于是我们可以规定区间:[1,si]= 1[1,si]= 1 表原创 2021-05-30 22:51:24 · 508 阅读 · 0 评论 -
用贪心解决货仓选址和完美矩阵
贪心算法的经典例题货仓选址完美矩阵直接排序比较大小本文章中出现的题都出自ACWING,学算法就上ACWING!货仓选址题目描述在一条数轴上有 N 家商店,它们的坐标分别为 A1…AN。A1…AN。现在需要在数轴上建立一家货仓,每天清晨,从货仓到每家商店都要运送一车商品。为了提高效率,求把货仓建在何处,可以使得货仓到每家商店的距离之和最小。输入格式第一行输入整数N。第二行N个整数A1…AN。A1…AN。输出格式输出一个整数,表示距离之和的最小值。数据范围1≤N≤1000001≤N原创 2021-05-25 20:59:57 · 597 阅读 · 0 评论 -
北京邮电机试题(持续更新中)
看着简单,注意细节就行!1. 寻找变化前的01序列给你一个 01 序列,HDLC 协议处理的话,如果出现连续的 5 个 1 会补 1 个 0。例如 1111110,会变成 11111010。现在给你一个经过 HDLC 处理后的 01 序列,你需要找到 HDLC 处理之前的 01 序列。例如给你 11111010,你需要输出 1111110。输入格式第一行一个整数 N,表示共有 N 组测试数据。每组数据占一行,包含一个 01 序列。输出格式每组数据输出一行结果,为处理之前的 01 序列.原创 2021-05-24 21:18:41 · 435 阅读 · 0 评论 -
单调栈的讲解及例题
单调栈的讲解及例题例题一:单调栈解题思路及伪代码单调栈做法例题二:直方图中最大的矩形解题思路暴力做法单调栈做法单调栈顾名思义,就是栈中元素呈现单调性。例题一:单调栈给定一个长度为N的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出-1。输入格式第一行包含整数N,表示数列长度。第二行包含N个整数,表示整数数列。输出格式共一行,包含N个整数,其中第i个数表示第i个数的左边第一个比它小的数,如果不存在则输出-1。数据范围1≤N≤1051≤数列中元素≤109输入样例:53原创 2021-02-28 01:03:33 · 437 阅读 · 0 评论 -
Java刷算法:收藏大法
Java刷算法怎么刷:持续更新中Java API复习输入与输出java.io.*java.util.*数组**判断二维数组是否为空****数组拷贝****字符数组与字符串互转****数组与list互相交换**排序数组排序List排序List数组自定义排序TreeMap排序HashMap排序TreeSet排序字符串StringStringBuilder和StringBuffer常用数据结构一. 基础算法(1)排序算法1.冒泡排序2. 快速排序3. 归并排序(2)二分(3)高精度(4)前缀和差分(5)双指针算法原创 2021-02-26 13:20:22 · 1089 阅读 · 3 评论 -
剑指Offer打卡: 找出数组中重复的数字
找出数组中重复的数字给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。注意:如果某些数字不在 0∼n−1 的范围内,或数组中不包含重复数字,则返回 -1;样例给定 nums = [2, 3, 5, 4, 3, 2, 6, 7]。返回 2 或 3。解题思路一:排序+遍历class Solution { public int duplica原创 2021-02-20 15:01:37 · 132 阅读 · 0 评论 -
火星人 Java题解
题目:火星人人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。火星人用一种非常简单的方式来表示数字——掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计原创 2021-02-19 23:37:05 · 595 阅读 · 0 评论 -
做做tx六道面试算法题,题目来自牛客
做做tx六道面试算法题1) 洗牌算法:对52张牌洗牌,要求尽量洗乱,而且原牌不能在原位置上重复2) 现在有n个微信群,每个群里面有2到m个人,设计一个数据结构存储这些信息,要求该结构能快速找出每一个人所在的所有的群Id。3) 数组a[N],存放了数字1至N-1,其中某个数字重复一次。写一个函数,找出被重复的数字。时间复杂度必须为O(N), 空间复杂度不能是O[N]。4) 现在有一个微信群,里面有n个人,每个人的id用整数int标示,现在要求找出id是对称数字的人出来,如3, 121, 12321。 请实现改原创 2021-02-19 23:25:36 · 784 阅读 · 3 评论 -
双指针算法及经典例题
双指针算法有两类:1.对撞指针 :两个指针分别指向不同的队列(归并排序)2.快慢指针 : 两个指针指向一个队列(快排)模板:for(int i =0,j=0;i<n;i++){ while(j<i&&check(i,j)){ j++; }}所有的双指针算法都是o(n*n),将朴素算法优化到o(n)双指针的经典例子:输出单词题目:输入I Love you (中间有空格)输出:ILoveyoupublic class I { public st原创 2021-01-17 23:25:09 · 1060 阅读 · 0 评论 -
leetcode 219 周赛
1688. 比赛中的配对次数给你一个整数 n ,表示比赛中的队伍数。比赛遵循一种独特的赛制:如果当前队伍数是 偶数 ,那么每支队伍都会与另一支队伍配对。总共进行 n / 2 场比赛,且产生 n / 2 支队伍进入下一轮。如果当前队伍数为 奇数 ,那么将会随机轮空并晋级一支队伍,其余的队伍配对。总共进行 (n - 1) / 2 场比赛,且产生 (n - 1) / 2 + 1 支队伍进入下一轮。返回在比赛中进行的配对次数,直到决出获胜队伍为止。示例 1:输入:n = 7输出:6解释:比赛详情:原创 2021-01-16 21:54:59 · 255 阅读 · 0 评论 -
这道题快拿二分写!二分总结
大家在做二分的时候也许会遇到很多问题,这篇文章就解题模板和例题帮你更加深入理解二分解题思路。整数二分模板bool check(int x) {/* ... */} // 检查x是否满足某种性质// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:int bsearch_1(int l, int r){ while (l < r) { int mid = l + r >> 1; if (check(mi.原创 2021-01-15 21:41:35 · 159 阅读 · 1 评论 -
洛谷 P1042 乒乓球 java
题目背景国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中1111分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白1111分制和2121分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。题目描述华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在1111分制和2121分制下,双方的比赛结果(截至记录末尾原创 2021-01-01 16:21:24 · 522 阅读 · 0 评论 -
找筷子 打卡
洛谷 P1469 找筷子题目描述经过一段时间的紧张筹备,电脑小组的“RP 餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题:筷子!CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷子的长度吗?输入格式第一行原创 2020-12-25 17:15:54 · 232 阅读 · 1 评论 -
洛谷 进制转换 打卡
洛谷 P1143 进制转换题目描述请你编一程序实现两种不同进制之间的数据转换。输入格式共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)n(2≤n≤16),第二行是一个n进制数,若n>10n>10则用大写字母A-FA−F表示数码10-1510−15,并且该nn进制数对应的十进制的值不超过10000000001000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2≤m≤16)。输出格式一个正整数,表示转换之后的m进制数。输入输出样例原创 2020-12-25 13:16:33 · 169 阅读 · 0 评论