数据结构
文章平均质量分 83
eck_燃
不要看上去很努力
展开
-
汉诺塔问题递归解法
public class Hanoi { public static void hanoi(int n) { if (n > 0) { func(n, "left", "mid", "right"); } } public static void func(int n, String from, String...原创 2018-02-11 12:19:52 · 206 阅读 · 0 评论 -
背包问题——分数背包
贪心问题分数背包分数背包与01背包问题不同点就是如果某物品无法被全部放入可以放入一部分 思路还是降序排列然后往背包添加题目: 有 m 元钱,n 种物品;每种物品有 j 磅,总价值 f 元, 可以使用 0 到 f 的任意价格购买相应磅的物品,例如使用 0.3f 元, 可以购买 0.3j 磅物品。要求输出用 m 元钱最多能买到多少磅物品。 输入样例 3 5 //物品...原创 2018-03-31 08:25:10 · 4590 阅读 · 0 评论 -
递归——买书问题
买书问题描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。 问小明有多少种买书方案?(每种书可购买多本) 输入 一个整数 n,代表总共钱数。(0 <= n <= 1000) 输出 一个整数,代表选择方案种数 样例输入 样例输入1: 20 样例输入2: 15 样例输入3: 0 样例输出 样例输出1: 2 样例输出2: ...原创 2018-03-28 19:16:04 · 1539 阅读 · 0 评论 -
背包问题——完全背包
完全背包我们扩展01背包问题,使每种物品无限增加,便得到完全背包问题, 01背包问题 有一个容积为V的背包,同时有n个物品,每个物品有自己的体积w和价值v, 每个物品的数量均为无限个,求使用该背包最多能装的物品价值总和。使用空间优化过的一维数组按照这种方式扩展 01背包之所以使用逆序循环,保证更新dp[j]的时候dp[j-W[i]]是没有放入物品i时的数据dp[i-1][j-W[i...原创 2018-03-31 10:34:43 · 273 阅读 · 0 评论 -
数学问题——进制&GCD&LCM
十转任意进制十转任意进制最优解 传送门 核心代码public static int gcd(int a, int b) { // 获取最大公约数 if (b==0) { return a; }else { return gcd(b, a%b); } }n个数求最大公约数...原创 2018-03-31 17:13:11 · 257 阅读 · 0 评论 -
递归——求数组内最小值
主要是训练对递归的感觉 把思想由遍历转换到递归上 其他文章和题目 递归与动态规划 奇怪的比赛 李白打酒通过递归的方式得到数组内最小值public class 数组最小值 { public static void main(String[] args) { int arr[]={1,5,-3,9,8,6}; System.out.pri...原创 2018-03-28 17:57:16 · 4133 阅读 · 0 评论 -
背包问题——01背包&01背包装箱
贪心算法01背包01背包问题是背包类问题中最基本的问题,其它各类背包问题都是在其基础上演变而来 牢记01背包的特点:每一件物品至多只能选一件,即在背包中该物品数量只有0和1两种情况 装入背包,如果装不下就换下一个,直到包满或者无物品可以装入的时候 之所以使用逆序循环,保证更新dp[j]的时候dp[j-W[i]]是没有放入物品i时的数据dp[i-1][j-W[i]] 这是因为01...原创 2018-03-30 21:57:11 · 629 阅读 · 0 评论 -
动态规划——最长公共子序列LIS(dp+最优解)
某国为了防御。。。 算了,简单就是一个长度为n的数列,求最长降序(允许相等) 序列是不连续的,在数组中找一个最长升序看有几项思路 反向求降序,可以用辅助数组,但这道题用一个变量就可以做记录 这里给dp版本训练思维public class LIS_DP { public static void main(String[] args) { int ar...原创 2018-03-30 19:20:35 · 1698 阅读 · 0 评论 -
数学问题——位运算比较数的大小
位运算比较数的大小(不出现比较运算符)给定两个数a和b,不用比较运算符,返回较大的那一个public class Code_01_GetMax { public static int flip(int n) { return n ^ 1; } public static int sign(int n) { //(n >&...原创 2018-05-11 21:57:35 · 2793 阅读 · 0 评论 -
递归——二分查找
递归实现二分查找//在有序数组内查询是否存在某一个值 ,存在返回下标,不存在返回-1public class 二分查找 { public static void main(String[] args) { int arr[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41 }; System.out...原创 2018-03-28 21:32:38 · 177 阅读 · 0 评论 -
子题数组的最大累加和问题
算法常用技巧子数组的最大累加和问题题目bilibili讲解传送门 https://www.bilibili.com/video/av21178974/ 给定一个数组arr,返回子数组的最大累加和。 例如,arr=[1,-2,3,5,-2,6,-1],所有的子数组中,[3,5,-2,6] 可以累加出最大的和12,所以返回12。 【要求】 如果arr长度为N,要求时间复...原创 2018-03-24 15:17:12 · 436 阅读 · 0 评论 -
日期类问题
例 2.3 日期差值 (2009 年上海交通大学计算机研究生机试真题)时间限制:1 秒 内存限制:32 兆 特殊判题:否题目描述:输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为 YYYYMMDD 输出: 每组数据输出一行,即日期差值 样例输入:样例输出: 11 来源: 九度教程第 6 题import java....原创 2018-03-31 23:45:00 · 361 阅读 · 0 评论 -
背包问题——多重背包
多重背包多重背包是介于01背包和完全背包之间: 有容积为V的背包,我们给定一些物品,每种物品包含体积w,价值v和数量k, 求用该背包能装下的最大价值总量。 与之前的背包问题都不同,每种物品可选数量不再为无穷多或者1,而是介于其中的一个确定数k 我们可以将多重背包问题转化到01背包上去,即每种物品均被视为k种不同的物品,不过这样时间复杂度较高 我们可以选择有技巧...原创 2018-03-31 15:59:21 · 326 阅读 · 0 评论 -
数学问题——大数运算
import java.math.BigDecimal;import java.util.Scanner;public class 大数值运算 { public static void main(String[] args) { /* * * 这里做一个关于大数据运算的这个类的小说明 这个数据要像new对象一样创建出来 BigDecimal bei...原创 2018-04-01 20:51:43 · 336 阅读 · 0 评论 -
数学问题——素数
判断是否为素数public class Main { public static void main(String[] args) { for (int i = 1; i < 20; i++) { System.out.println(i + " " + isPrime(i)); } } public...原创 2018-03-31 21:26:32 · 390 阅读 · 0 评论 -
成绩排序
主要是为了让大家熟悉比较器函数的用法以及如何将类或者结构体根据要求的属性优先级进行排序。还有java转c++的知识点题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息。输入: 测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的...原创 2017-10-15 20:52:10 · 547 阅读 · 0 评论 -
数学问题——位运算实现加减乘除
位运算实现加减乘除位运算实现加法 public static int add(int a, int b) { int sum = a; while (b != 0) {//不断的相加,直到没有进位信息 sum = a ^ b;//产生进位信息 二进制后直接&运算就是(1&1=1 else 0)...原创 2018-03-31 21:37:42 · 591 阅读 · 0 评论 -
二分求幂——人见人爱 A^B(九度57题)
二分求幂若要求2^32次方,首先想到要将2循环相乘32次。但实际上不需要这么麻烦 按照原始策略解的时候,当完成前16次循环时,就已经获得了2^16的值,就不需要随后的16次循环了 只需要将2^16求平方即可。同理 2^16只需要对2^8求平方即可,2^8只需要求2^4的平方即可…… 这样本来32次乘法才能完成的工作,只需要6次乘法便可以完成。 2^32具有某种特性,它是2的整数次方,其...原创 2018-04-08 21:44:06 · 319 阅读 · 0 评论 -
贪心算法——跳跃游戏
跳跃游戏【题目】 给定数组arr,arr[i]==k代表可以从位置i向右跳1~k个距离。 比如,arr[2]==3,代表从位置2可以跳到位置3、位置4或位置5。 如果从位置0出发,返回最少跳几次能跳到arr最后的位置上。 【举例】 arr=[3,2,3,1,1,4]。 arr[0]==3,选择跳到位置2;arr[2]==3,可以跳到最后的位置。 所以返回2。 【要求】 如果a...原创 2018-03-30 20:45:35 · 1223 阅读 · 0 评论 -
数学问题——调整概率
调整概率调整[0,x)区间上的数出现的概率 【题目】 假设函数Math.random()等概率随机返回一个在[0,1)范围上的 数,那么我们知道,在[0,x)区间上的数出现的概率为x (0 < x ≤ 1)。给定一个大于0的整数k,并且可以使用 Math.random()函数,请实现一个函数依然返回在[0,1)范围上 的数,但是在[0,x)区间上的数出现的概率为xk(0 &l...原创 2018-03-31 22:00:17 · 599 阅读 · 0 评论 -
猫狗收容所
猫狗收容所这道题就是基本的code能力,没什么考察点 设计函数完成问题 读题能力 链接:https://www.nowcoder.net/questionTerminal/6235a76b1e404f748f7c820583125c50 来源:牛客网时间限制:3秒 空间限制:32768K算法知识视频讲解 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方原创 2018-02-02 14:08:13 · 1084 阅读 · 0 评论 -
牛客网 左程云第二题 算存水量
给定一个非负数的数组,代表一个容器。例如数组[0,1,0,2,1,0,1,3,2,1,2,1],就是 以下图形中黑色的部分。如果用这个容器接水的话,请问可以接多少水?还以这个数组为例, 可以接 6 格水,就是以下图形中蓝色的部分。 要求:实现时间复杂度 O(N),额外空间复杂度 O(1)的解法 public class Main{ public static void m原创 2018-01-06 19:58:42 · 765 阅读 · 0 评论 -
布隆过滤器原理简述
布隆过滤器,使用布隆过滤器有以下四个特征 1.类似黑名单问题 2.样本量非常大 3.空间要求严格 4.允许有失误率 举个例子 互联网有100忆个url是禁止访问的 每个url是64字节长度 如果用户请求这些url就将用户的请求拦截 如果仅仅用hash的方式那么就需要一个640G的内存。这显然是不现实的 正确方法是使用布隆过滤器 布隆过滤原创 2018-01-30 15:09:09 · 709 阅读 · 0 评论 -
末尾0的个数(等价转化复杂问题)
末尾0的个数链接:https://www.nowcoder.com/questionTerminal/6ffdd7e4197c403e88c6a8aa3e7a332a 来源:牛客网时间限制:1秒 空间限制:32768K输入一个正整数n,求n!(即阶乘)末尾有多少个0? 比如: n = 10; n! = 3628800,所以答案为2 输入描述:输入为一行,n(1 ≤ n ≤ 10翻译 2018-01-21 01:58:25 · 424 阅读 · 0 评论 -
动态规划——卡牌游戏最大伤害
最大伤害某游戏是一个卡牌类游戏,玩家通过战斗或抽牌可以拿到一些技能牌,每张技能牌都有对应的伤害值(伤 害值>=0), 当你有了组合技属性之后,你可以在自己手头上选择任意张技能牌, 以组合技的方式来攻击 boss, 组合技的总伤害将等于所组合的各张技能牌的伤害值的乘积(只有一张牌时,组合技伤害值等于这张牌 本身的伤害值), 但是能发动组合技必须有个前提:所有被选择的技能牌...原创 2018-03-30 21:20:22 · 1678 阅读 · 1 评论 -
动态规划——递推 兔子和奶牛
递推母牛每年生一只母牛,新出生的母牛成长三年后也能每年生一只 母牛,假设不会死。求N年后,母牛的数量。 进阶 如果每只母牛只能活10年,求N年后,母牛的数量。public class Cow { public static int cowNumber1(int n) {//递归原型 if (n < 1) { return 0...原创 2018-03-30 14:33:42 · 561 阅读 · 0 评论 -
求数组内最大差值(桶实现)
数组内最大差值给定一个数组,求数组内数最大差值的算法 输入 数组长度n n个正整数 样例 input 4 0 1 3 6 output 3 样例2 input 6 0 11 12 45 47 69//这部分可以是乱序 output 23 时间复杂度最优的方法第一步,遍历,求出最大值最小值从而求出范围原创 2018-01-20 22:53:12 · 1908 阅读 · 0 评论 -
牛客网练习赛8 加边无向图(并查集)
题目地址 java和c++都有 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 题目描述给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述:第一行两个正整数 n 和 m 。 接下来的m行中,每行两个正整数 i 、 j ,表...原创 2018-01-03 12:41:38 · 455 阅读 · 0 评论 -
牛客练习赛8 A-约数个数的和
题目描述给个n,求1到n的所有数的约数个数的和~ 输入描述:第一行一个正整数n输出描述:输出一个整数,表示答案示例1 输入3输出5说明样例解释: 1有1个约数1 2有2个约数1,2 3有2个约数1,3备注:n <= 100000000原创 2017-12-15 22:01:55 · 368 阅读 · 0 评论 -
蓝桥杯 历届试题 日期问题
历届试题 日期问题 时间限制:1.0s 内存限制:256.0MB问题描述 小明正在整理一批历史文献。这些历史文献中出现了很多日期。小明知道这些日期都在1960年1月1日至2059年12月31日。令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的,有采用月/日/年的,还有采用日/月/年的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对...原创 2018-02-12 11:22:27 · 1734 阅读 · 0 评论 -
递归——李白打酒
李白打酒bilibili视频讲解传送门 同类型题目:奇怪的比赛 话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记...原创 2018-03-28 18:03:59 · 711 阅读 · 0 评论 -
八皇后问题(递归回溯)
递归回溯八皇后问题是递归回溯中非常经典的问题,这个问题甚至在计算机产生前就已经存在了 它到底是什么意思呢八皇后国际象棋中的皇后,可以横向、纵向、斜向移动。 如何在一个8X8的棋盘上放置8个皇后,使得任意两个皇后都不在同一条横线、竖线、斜线方向上? 让我们来举个栗子,下图的绿色格子是一个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些格子: 下图的绿色格子是两个皇后在棋盘上...原创 2018-04-18 22:33:42 · 3147 阅读 · 2 评论 -
递归——奇怪的比赛
奇怪的比赛某电视台举办了低碳生活大奖赛。题目的计分规则相当奇怪:每位选手需要回答10个问题(其编号为1到10),越后面越有难度。答对的,当前分数翻倍;答错了则扣掉与题号相同的分数(选手必须回答问题,不回答按错误处理)。每位选手都有一个起步的分数为10分。某获胜选手最终得分刚好是100分,如果不让你看比赛过程,你能推断出他(她)哪个题目答对了,哪个题目答错了吗?如果把答对的记为1...原创 2018-03-28 17:50:02 · 2545 阅读 · 2 评论 -
打印矩阵问题
这类问题主要是让你以某种顺序打印出一个矩阵,我们要跳出局部变换下标的思想,从宏观考虑问题转圈打印矩阵 【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10 【要求】 额外空间复杂度为O原创 2018-02-01 09:20:11 · 454 阅读 · 0 评论 -
图的遍历——DFS
图搜索伪代码实现 实现不撞南墙不回头,改为优先遍历层次更深的状态, (与头结点最短经过几条边可以连通就视为是第几层) 直到遇到一个节点,其不再拥有子树,则返回上一层,访问其未被访问过的子树, 直到解答树中所有的状态都被遍历完毕。 已经遍历过的不再遍历,我们用set来实现这个功能//图的遍历只需要从某个节点开始,这个节点仅需要它自身的value和它的邻接...原创 2018-03-30 11:23:39 · 206 阅读 · 0 评论 -
栈的与队列专题
栈用堆栈之前,我们首先介绍标准模板库中堆栈模板 通过对堆栈模板的使用,可以使我们跳过对堆栈具体实现的编码 而专注于堆栈在程序中的应用 (有兴趣可以查看源码,或者以后我会对数据结构实现继续写文章,请持续关注,本篇的内容在于竞赛和面试场上迅速入手运用) import java.util.Stack;Stack< integer > stack;创建一个内部元素是intege...原创 2018-02-11 17:56:53 · 281 阅读 · 0 评论 -
递归回溯——Prime Ring Problem
Uva 1016 Prime ring problem紫书194页原题 王道计算机考研机试指南147页Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14715 Accepted Submission(s): 6720...原创 2018-03-29 16:39:08 · 225 阅读 · 0 评论 -
广度优先检索——BFS
图查找伪代码描述 对应后面bfs方法的部分广度优先搜索,先找近处,再找远处,如果把所有的相连接点列出来,会先将第一层遍历出来,再将第二,第三,第N层遍历出来 广度优先搜索可以用于对图的遍历,但它的应用远不仅如此。HDU 1253胜利大逃亡Ignatius被魔王抓走了,有一天魔王出差去了,这但是Ignatius逃亡的好机会.魔王住在一个城堡里,城堡是一个A...原创 2018-03-27 02:19:38 · 444 阅读 · 0 评论 -
二叉树的Morris遍历
二叉树二叉树的Morris遍历cur无左子树 ,cur向右cur有左子树,找到左子树上的最右节点,mostrightmostright的右孩子为nullmostright.right=cur,cur向左移动mostright的右孩子为curmostright=null cur向右图解过程 递归的本质 对于递归遍历,为什么打...原创 2018-02-21 12:50:49 · 304 阅读 · 0 评论 -
图的前驱知识——并查集
并查集并查集的介绍http://blog.csdn.net/wdays83892469/article/details/78965328加边无向图http://blog.csdn.net/wdays83892469/article/details/78959909畅通工程 2005年浙江大学计算机及软件工程研究生机试真题 题目描述: 某省调查城镇...原创 2018-03-08 18:42:29 · 386 阅读 · 0 评论