算法
bluecyan
热爱生活,热爱编程!
Love life, Love programming!
展开
-
迭代法(迭代+栈)模拟递归实现深度优先搜索(DFS):以力扣原题[112. 路径总和]及[113. 路径总和 II]为例
如果直接将 road 作为参数,因为是传引用,子递归对 road 的改变将直接影响上层递归中 road 的值(毕竟自始至终都是在对同一个对象做操作),如果要以用 road 做参数的方式实现回溯,需要在传递 road 时 new 一个新的对象,新对象即是子递归需要的新 road,将新对象作为参数传递给子递归函数,这样,每次递归调用时传入的 road 都不同,子递归对 road 的改变也就不会影响上层递归中 road 的值了。在状态转移中有一个深度优先搜索中重之又重的概念:回溯。原创 2023-04-14 19:32:34 · 794 阅读 · 0 评论 -
实现 当 a > b 时交换两数的值(目的是为了让第一个变量永远是两个变量中较小的),要求不使用第三个变量
【代码】实现 当 a > b 时交换两数的值(目的是为了让第一个变量永远是两个变量中较小的),要求不使用第三个变量。原创 2023-03-21 11:11:20 · 230 阅读 · 0 评论 -
试题 H: 人物相关性分析【第十届蓝桥杯 省赛 Java B组】
试题 H: 人物相关性分析【问题描述】 小明正在分析一本小说中的人物相关性。他想知道在小说中 Alice 和 Bob有多少次同时出现。 更准确的说,小明定义 Alice 和 Bob“同时出现”的意思是:在小说文本中 Alice 和 Bob 之间不超过 K 个字符。 例如以下文本:This is a story about Alice and Bob. Alice wants t...原创 2020-03-11 21:53:20 · 693 阅读 · 0 评论 -
试题 G: 外卖店优先级【第十届蓝桥杯 省赛 Java B组】
试题 G: 外卖店优先级【问题描述】 “饱了么”外卖系统中维护着 N 家外卖店,编号 1 ∼ N。每家外卖店都有一个优先级,初始时 (0 时刻) 优先级都为 0。 每经过 1 个时间单位,如果外卖店没有订单,则优先级会减少 1,最低减到 0;而如果外卖店有订单,则优先级不减反加,每有一单优先级加 2。 如果某家外卖店某时刻优先级大于 5,则会被系统加入优先缓存中;如果优先级小于...原创 2020-03-11 20:30:13 · 459 阅读 · 0 评论 -
浅谈利用模运算获得周期序列
在写程序时作者常常会有实现某变量值在一定范围内循环重复出现的需求,作者将其称之为周期序列,故此对其进行了研究。(周期序列:类似1 2 3 4 1 2 3 4 1 2 3 4……的序列,例子所示周期序列 初始值为1,步长为1,最短周期为4)最简单的,如果我们想要获得周期序列1 2 3 4 5 6 7 8 9 10该怎么做?我猜你肯定会马上想到——利用模运算,也就是求余。这就是我们平时对这类需求遇...原创 2019-11-24 16:22:39 · 608 阅读 · 0 评论 -
简单的文本加解密算法
从古至今,信息安全都是一个很重要的问题,为此人们开发了许多用于加密信息,比如凯撒密码,维吉尼亚密码等。(了解更多:4种古典密码算法的设计与实现——C++)我们知道,对于a,a^k^a=a,所以我们可以用异或运算来对文本进行加密。import java.util.*;public class Main { public static void main(String[] args) { ...原创 2019-11-23 17:57:23 · 2320 阅读 · 0 评论 -
三种交换数值的方法;不使用第三个变量交换两个变量的值
在作者大一参加学校计算机实验室成员资格笔试的时候,第一个编程题就是交换两个数值。当时使用的就是最简单也最基础的交换法。以及最骚的打印法System.out.println(“打印法:x:”+y+“,y:”+x);除了交换法用来交换数值外,还可以用加减法和异或法,交换两个数可谓是最最简单,最最基础的编程了。不知道你们还有哪些交换数值的骚操作?交换法:x:6,y:3。加减法:x:6,y:3。异或法:x:6,y:3。打印法:x:6,y:3。原创 2019-11-23 17:55:30 · 985 阅读 · 0 评论 -
埃拉托斯特尼筛法求自然数n以内的全部质数
求质数作为学习编程过程中一道经典的题目,相信任何一个程序员/准程序员都遇到过。随便拉一个程序员/准程序员都能写出以下求质数的代码import java.util.Scanner;public class Examination { public static void main(String[] args) { Scanner reader = new Scanner(System....原创 2019-11-23 17:54:01 · 1365 阅读 · 0 评论 -
用Java模拟C++的next_Permutation函数
不得不说,C++的next_Permutation十分好用,自然而然,我想找找Java里有没有类似的函数。嗯,没找到。不过没关系,我们可以用Java自己实现一个。如果我们将全排列按照大小顺序进行排序,假设我们知道了第i个排列是[A0, A1, A2, A3, ……],那么第i+1个排列就是比[A0,A1, A2, A3, ……]大,且最小的那个。...原创 2019-11-23 17:42:12 · 612 阅读 · 0 评论 -
深度优先搜索实现有重复元素的全排列(Java实现)
问题描述给出一个数组array[]=[A0, A1, A2, A3, ……],求出它的全排列,其中元素可能有重复。样例输入1 1 3 4样例输出1 1 3 41 1 4 31 3 1 41 3 4 11 4 1 31 4 3 13 1 1 43 1 4 13 4 1 14 1 1 34 1 3 14 3 1 1分析深度优先搜索实现无重复元素的全排列全排列很容易,...原创 2019-11-23 11:21:38 · 951 阅读 · 0 评论 -
试题 D: 数的分解【第十届蓝桥杯 省赛 Java B组】
试题 D: 数的分解 把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和1001+1000+18 被视为同一种。【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填...原创 2019-04-09 18:59:59 · 792 阅读 · 3 评论 -
试题 F: 特别数的和【第十届蓝桥杯 省赛 Java B组】
试题 F: 特别数的和【问题描述】 小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 n 中,所有这样的数的和是多少?【输入格式】 输入一行包含一个整数 n。【输出格式】 输出一行,包含一个整数,表示满足条件的数的和。【样例输...原创 2019-04-12 20:14:52 · 780 阅读 · 0 评论 -
试题 C: 数列求值【第十届蓝桥杯 省赛 Java B组】
试题 C: 数列求值【问题描述】 给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求第 20190324 项的最后 4 位数字。【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个 4 位整数(提示:答案的千位不为 0),在提交答案时只填写这个整数,填写多余的内容将无法得分。...原创 2019-04-08 19:31:03 · 1321 阅读 · 0 评论 -
试题 E: 迷宫【第十届蓝桥杯 省赛 Java B组】
试题 E: 迷宫【问题描述】 下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方。010000000100001001110000 迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这个它的上、下、左、右四个方向之一。 对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,一共 10 步。其中 D、U、L、...原创 2019-04-11 20:05:08 · 2475 阅读 · 6 评论 -
试题 B: 不同子串【第十届蓝桥杯 省赛 Java B组】
试题 B: 不同子串【问题描述】 一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。注意在计算时,只算本质不同的串的个数。请问,字符串0100110001010001 有多少个不同的非空子串?...原创 2019-04-06 21:54:15 · 2115 阅读 · 0 评论 -
试题 A:组队【第十届蓝桥杯 省赛 Java B组】
q原创 2019-04-04 21:20:21 · 1069 阅读 · 1 评论