
数据结构和算法
文章平均质量分 67
柯南二号
沉淀技术,为业务赋能
展开
-
蓝桥杯 ADV_302 秘密行动
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 小D接到一项任务,要求他爬到一座n层大厦的顶端与神秘人物会面。这座大厦有一个神奇的特点,每层的高度都不一样,同时,小D也拥有一项特殊能力,可以一次向上跳跃一层或两层,但是这项能力无法连续使用。已知向上1高度消耗的时间为1,跳跃不消耗时间。由于事态紧急,小D想知道他最少需要多少时间到达顶层。输入格式 第一行包含一个整数n...原创 2020-02-21 13:09:55 · 979 阅读 · 2 评论 -
蓝桥杯十进制转十六进制Java
基础练习之十进制转十六进制问题描述十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,以此类推,十进制的30在十六进制中是1E。 给出一个非负整数,将它表示成十六进制的形式。...原创 2020-01-21 15:16:32 · 285 阅读 · 0 评论 -
## 算法训练之最大最小公倍数 ALGO002
算法训练之最大最小公倍数 ALGO002问题描述已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式输入一个正整数N。输出格式输出一个整数,表示你找到的最小公倍数。样例输入9样例输出504数据规模与约定1 <= N <= 106当看到这个题目第一眼,想当然的以为会是N (N-1) (N-2)三者乘积,并且这个题目给出输入示...原创 2020-01-23 10:51:31 · 236 阅读 · 0 评论 -
蓝桥杯 ADV_303 数组求和
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 输入n个数,围成一圈,求连续m(m<n)个数的和最大为多少?输入格式 输入的第一行包含两个整数n, m。第二行,共n个整数。输出格式 输出1行,包含一个整数,连续m个数之和的最大值。样例输入10 39 10 1 5 9 3 2 6 7 4样例输出23数据规模和约定 0<m<n&l...原创 2020-02-19 15:54:06 · 548 阅读 · 0 评论 -
线段树 模板 Java语言版
线段树模板原创 2022-08-09 22:11:17 · 1238 阅读 · 0 评论 -
DFS题单以及模板汇总
DFS题单汇总原创 2022-07-27 23:36:00 · 954 阅读 · 0 评论 -
Java/C++输入输出特定格式模板总结
算法输入输出模板原创 2022-07-26 23:16:40 · 1384 阅读 · 0 评论 -
BFS题单总结
算法,bfs原创 2022-07-26 22:17:32 · 1002 阅读 · 0 评论 -
线性动态规划专讲
线性动态规划专讲原创 2022-06-05 23:30:05 · 381 阅读 · 1 评论 -
二分专题讲解-看完之后必须会二分
二分专题讲解二分法查找某个有序数组中的指定数字可以达到log(n)log(n)log(n)的时间复杂度。运用二分法的前提一定是针对某个有序集合去进行操作,如果该集合非有序的,一定是不能进行二分操作的。在目前的刷题单中,遇到用二分的场景有两大类:1. 二分查找有序数组的某个值在这种大类下,又分为三种情况:查找有序数组某个值(数组中该值有且仅出现一次)LeetCode704 二分查找class Solution { public int search(int[] nums, int原创 2022-05-29 23:17:16 · 399 阅读 · 0 评论 -
能力提升综合题单Part2 基础算法 第一天
https://www.luogu.com.cn/problem/P1003P1003 [NOIP2011 提高组] 铺地毯题目描述为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯。一共有 n 张地毯,编号从 1 到 n。现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上。地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号。注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖。输入原创 2022-04-29 23:32:25 · 362 阅读 · 0 评论 -
快速排序 Java模板
快速排序 Java模板原创 2022-04-05 22:25:40 · 1135 阅读 · 0 评论 -
dfs构造N叉树面试算法题
今天遇到一个没有写出来的算法题,记录一下。如下:要求我补充完整printCategory()和buildTree()两个函数。printCategory()函数负责打印buildTree()负责构造树节点public class Interview001 { static class Category { /** * 分类id */ Integer id; /** * 名称原创 2022-03-29 22:05:48 · 408 阅读 · 0 评论 -
21天掌握动态规划 第二天
21天掌握动态规划第二天 线性动态规划2.1 53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nu原创 2021-07-03 22:24:24 · 163 阅读 · 3 评论 -
21天掌握动态规划刷题指南 第二天
21天掌握动态规划第二天 线性动态规划2.1 53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nu原创 2021-07-03 16:18:18 · 150 阅读 · 6 评论 -
21天掌握动态规划 第一天
21天掌握动态规划首先我觉得得弄明白『动态规划』算法到底是个什么?上述这张图是摘自截取百度百科对动态规划的定义,我个人觉得主要是有如下几个特点和分治法类似,将待求解问题划分成若干类似原理子问题,然后从子问题入手最后得到原问题的解往往是题干出现“最大”“最小”“最好”“最多”等最优化性质的词的时候可以优先考虑动态规划思想(当然也不一定是这样,只是我个人刷题的经验而已)动态规划很多题往往是需要按照如下两个步骤确定状态表示的含义,同时确定好基本的初始值状态转移方程或者不同状态之间存在的依赖关系原创 2021-07-02 23:53:02 · 506 阅读 · 6 评论 -
动态规划专题 最长上升序列模型 acwing 1016.最大上升子序列和
acwing 1016.最大上升子序列和一个数的序列 bib_ibi,当 b1<b2<…<bSb_1<b_2<…<b_Sb1<b2<…<bS 的时候,我们称这个序列是上升的。对于给定的一个序列(a1,a2,…,aN)(a_1,a_2,…,a_N)(a1,a2,…,aN),我们可以得到一些上升的子序列(ai2,ai2,…,aik)(a_{i2},a_{i2},…,a_{ik})(ai2,ai2,…,aik),这里1≤i1<i2原创 2021-06-26 08:31:06 · 285 阅读 · 0 评论 -
最长上升序列模型 acwing 1016.最大上升子序列和
acwing 1016.最大上升子序列和一个数的序列 ,当 的时候,我们称这个序列是上升的。对于给定的一个序列,我们可以得到一些上升的子序列,这里。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。这些子序列中和最大为18,为子序列(1,3,5,9)的和。你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100,1,2,3)的最大上升子序列和为100,而最长上升子序列原创 2021-06-26 08:27:43 · 196 阅读 · 0 评论 -
LeetCode 1734. 解码异或后的排列
1734. 解码异或后的排列题目描述:给你一个整数数组 perm ,它是前 n 个正整数的排列,且 n 是个 奇数 。它被加密成另一个长度为 n - 1 的整数数组 encoded ,满足 encoded[i] = perm[i] XOR perm[i + 1] 。比方说,如果 perm = [1,3,2] ,那么 encoded = [2,1] 。给你 encoded 数组,请你返回原始数组 perm 。题目保证答案存在且唯一。示例 1:输入:encoded = [3,1]输出:[1,2,3原创 2021-05-11 09:57:13 · 243 阅读 · 0 评论 -
斐波拉切数列 java版本
斐波拉切数列 java版本试求FibnFib_nFibn样例输入:5输出:5算法1(暴力递推) O(n)想要存储他,很多人会想到用一维数组存储+递推。递推初值为Fib0=0,Fib1=1Fib_0=0,Fib_1=1Fib0=0,Fib1=1。递推式为Fibn=Fibn−1+Fibn−2Fib_n=Fib_{n-1}+Fib_{n−2}Fibn=Fibn−1+Fibn−2代码也很好实现:public class Solution { public static原创 2021-05-08 15:41:30 · 322 阅读 · 0 评论 -
算法时间复杂度分析
算法时间复杂度分析下面均借鉴于《数据结构与算法经典问题分析-Java语言描述》一书1、分治法主定理2、渐近表示法的性质3、常用的对数和累加公式原创 2021-05-07 07:58:18 · 194 阅读 · 0 评论 -
1553. 吃掉 N 个橘子的最少天数
写算法对于引用集合类型的尽量使用全局变量,特别是记忆化递归搜索的题1553. 吃掉 N 个橘子的最少天数厨房里总共有 n 个橘子,你决定每一天选择如下方式之一吃这些橘子:吃掉一个橘子。如果剩余橘子数 n 能被 2 整除,那么你可以吃掉 n/2 个橘子。如果剩余橘子数 n 能被 3 整除,那么你可以吃掉 2*(n/3) 个橘子。每天你只能从以上 3 种方案中选择一种方案。请你返回吃掉所有 n 个橘子的最少天数。示例 1:输入:n = 10输出:4解释:你总共有 10 个橘子。第 1原创 2021-05-03 10:58:04 · 238 阅读 · 1 评论 -
LeetCode 2. 两数相加
2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807思考:这个题要注意几个细节:要注意判断l1和l2是否为null在while循环以后要注意最后的进位是否还有将头结点和原创 2021-04-07 14:36:29 · 114 阅读 · 0 评论 -
LeetCode 2021 春季赛
LeetCode 春季赛1. 采购方案小力将 N 个零件的报价存于数组 nums。小力预算为 target,假定小力仅购买两个零件,要求购买零件的花费不超过预算,请问他有多少种采购方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1示例 1:输入:nums = [2,5,3,5], target = 6输出:1解释:预算内仅能购买 nums[0] 与 nums[2]。示例 2:输入:nums = [2,2,1原创 2021-04-05 21:59:24 · 296 阅读 · 0 评论 -
Java 实现二叉树的前序中序后序遍历(递归和迭代版本都有)
递归版本的前序遍历(中左右/根左右)/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, T原创 2021-03-21 13:49:10 · 329 阅读 · 0 评论 -
Kruskal算法求最小生成树 Java带输入输出
Kruskal算法求最小生成树给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible。给定一张边带权的无向图G=(V, E),其中V表示图中点的集合,E表示图中边的集合,n=|V|,m=|E|。由V中的全部n个顶点和E中n-1条边构成的无向连通子图被称为G的一棵生成树,其中边的权值之和最小的生成树被称为无向图G的最小生成树。输入格式第一行包含两个整数n和m。接下来m行,每行包含三个整数u,v,w,表示点u原创 2021-03-16 22:03:18 · 699 阅读 · 0 评论 -
Java给定一个字符串 如何检验一个日期是否为有效日期
今天面试遇到一个算法题,如何检验一个日期是否为有效日期,当时只想着把字符串分段截取,然后再去检验,没注意到还有SimpleDateFormat这种,特此总结一下import java.text.ParseException;import java.text.SimpleDateFormat;/** * @author zhouyanxiang * @Date 2021-03-2021/3/11-20:51 * @Title 检验一个字符串是否为有效日期 */public class So原创 2021-03-11 21:01:08 · 1039 阅读 · 1 评论 -
01背包问题 java完整输入输出代码
背包问题总结1. 01背包问题有 NNN 件物品和一个容量是 VVV的背包。每件物品只能使用一次。第 iii 件物品的体积是viv_ivi,价值是 wiw_iwi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数N,VN,VN,V,用空格隔开,分别表示物品数量和背包容积。接下来有 NNN 行,每行两个整数 vi,wiv_i,w_ivi,wi,用空格隔开,分别表示第 iii件物品的体积和价值。输出格式输出一个整数,表示最原创 2021-02-28 23:33:35 · 1111 阅读 · 1 评论 -
从上到下打印二叉树 Java代码实现(利用Queue和List实现)
从上到下打印二叉树 Java代码实现(利用Queue和List实现)剑指 Offer 32 - I. 从上到下打印二叉树从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7][3,9,20,null,null,15,7][3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7][3,9,20,15,7][3,9,20原创 2021-02-27 23:04:37 · 548 阅读 · 1 评论 -
acwing 913. 排队打水和最短时间处理联系
acwing 913. 排队打水有 nnn 个人排队到 1 个水龙头处打水,第 iii 个人装满水桶所需的时间是 tit_iti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?输入格式第一行包含整数 nnn。第二行包含 nnn 个整数,其中第 iii个整数表示第 iii 个人装满水桶所花费的时间 tit_iti。输出格式输出一个整数,表示最小的等待时间之和。数据范围1≤n≤1051 \leq n \leq 10^51≤n≤105,1≤ti≤1041 \leq t_i \le原创 2021-01-31 22:17:11 · 419 阅读 · 0 评论 -
用Java实现简单的四则运算的运算器
用Java通过栈实现简单的四则运算的运算器// package com.threefiree.algotithm.leetcode.stack.test227;import java.net.Socket;import java.util.ArrayDeque;import java.util.Deque;/** * @author zhouyanxiang * @Date 2021-01-2021/1/27-16:03 * @Title 227. 基本计算器 II */public原创 2021-01-27 16:37:03 · 1023 阅读 · 0 评论 -
acwing 1381 阶乘
acwing 1381 阶乘题目描述NNN 的阶乘(记作 N!N!N!)是指从 111 到 NNN(包括 111 和 NNN)的所有整数的乘积。阶乘运算的结果往往都非常的大。现在,给定数字 NN,请你求出 N!N! 的最右边的非零数字是多少。例如 5!=1×2×3×4×5=1205!=1×2×3×4×5=1205!=1×2×3×4×5=120 5!=1×2×3×4×5=1205!=1×2×3×4×5=1205!=1×2×3×4×5=120,所以 5!5!5! 的最右边的非零数字是 2。输入格原创 2021-01-25 15:47:01 · 216 阅读 · 0 评论 -
运用BigInteger进行整数之间的高精度的加减乘除运算
运用BigInteger进行整数之间的高精度的加减乘除运算一、acwing791. 高精度加法给定两个正整数,计算它们的和。输入格式共两行,每行包含一个整数。输出格式共一行,包含所求的和。数据范围1≤整数长度≤1000001≤整数长度≤100000输入样例:1223输出样例:35import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;impor原创 2021-01-06 14:38:32 · 1271 阅读 · 0 评论 -
链表之反转链表专题
链表之反转链表专题如题,LeetCode 206看到反转链表,我们要思考的核心点在于如何让链表的结点指针指向的方向反转对于反转链表,一般有迭代或者递归两种思考方向第一种:迭代在这种方案中,做题总结出了双指针迭代比较高效,同时有一种双指针的迭代公式具体的动画效果可以参考LeetCode官方题解题解动画while(cur!=null) { //记录当前节点的下一个节点 tmp = cur.next; //然后将当前节点指向pre cur.next = pre; //pre和cur节点原创 2020-06-30 09:20:10 · 3384 阅读 · 0 评论 -
牛客网刷题笔记
牛客网刷题笔记:查找-day011、顺序表查找概念正确解析:顺序查找指从第一个数据元素开始查找到最后而顺序表查找是顺序存储结构上进行查找2、折半查找具体题目正确解析:选D。索引从0到12,left=0,right=12。1、mid=(left+right)/2=6,与70比较,70<75,left=mid+1=7,right=122、mid=(left+right)...原创 2020-02-27 20:41:25 · 529 阅读 · 0 评论 -
蓝桥杯算法题之基础算法查找整数 Java代码为例
蓝桥杯算法题基础算法之查找整数问题描述给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。输入格式第一行包含一个整数n。第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。第三行包含一个整数a,为待查找的数。输出格式如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。样例输入61 9 4 8 3 99样例输...原创 2020-01-20 10:24:01 · 357 阅读 · 0 评论 -
用数组实现栈
这看上去是一个简单的话题,但是要注意几个点:1.要注意入栈的时候判断在入栈的时候要注意先判断栈是否已经满了如果栈已经满了则要注意扩展数组的长度,不然会造成越界public void push(int item) { if (size == array.length) { array = Arrays.copyOf(array, size * 2); } array[si...原创 2019-12-02 21:43:24 · 261 阅读 · 0 评论 -
给定三个顶点的坐标使用程序计算三角形
给定三个顶点的坐标使用程序计算三角形public class test1 { public static void main(String[] args) { double x1 = 2.3, y1 = 2.5; double x2 = 6.4, y2 = 3.1; double x3 = 5.1, y3 = 7.2; double s = (x2 - x1)*...原创 2019-11-30 16:18:47 · 1619 阅读 · 0 评论 -
数据结构和算法之链表(Java语言实现)
数据结构和算法之链表(Java语言实现)一、什么是链表链表是一种用于存储数据集合的数据结构。链表具有以下属性相邻元素之间通过指针连接最后一个元素的后继指针为NULL在程序执行过程中,链表的长度可以增加或者减小链表的空间能够按需分配(直到系统内存耗尽)没有内存空间的浪费(但是链表中的指针需要一些额外的内存开销)二、链表抽象数据类型2.1、链表的主要操作插入:插入一个元素到链...原创 2019-10-31 21:58:24 · 287 阅读 · 0 评论