算法
九术沫
我愿为你的梦想插上翅膀
展开
-
折半查找(快速定位)
下面要讲述的是两种用到折半查找的定位需求定位一**tips:**辅助快速插入,找到某个数对应的插入位置。细节描述:在一个有序数组list中,插入一个数num.插入一个num,先要找到插入的位置,一般情况下折半查找的速度是最快的。在list数组中,需要找到一个位置 i,满足(list[i−1]<=num)&&(list[i]>num)(list[i-1]<=num )\&\& (list[i]>num)(list[i−1]<=n原创 2021-04-12 15:02:49 · 195 阅读 · 0 评论 -
N皇后问题
描述给一个n*n的棋盘,在棋盘上放置n个皇后要求是:皇后之间不能共行、列、斜线解决方法遍历在任意一种正确的方案中,每一行有且只有一个皇后。当确定了某行中皇后的位置,便向下一行探索合法的皇后位置,直到最后一行,如果n个皇后放置完毕,则算作一种方案,若未放完则该方案不合法。方法细节初始时,将第一行的每一格作为一个方案的开始步骤,以步骤集的方式加入队列。然后以一个步骤集为前提,将下一行中每一个合法的位置,添加到步骤集上,并将该步骤集加入队列。直到某一步骤集的步数为n或者队列为空,循.原创 2021-04-06 16:23:56 · 141 阅读 · 0 评论 -
迷宫的最短路径和路径记录(第十届蓝桥杯省赛A组C语言第四题)
通过矩阵,找迷宫最短路径并输出路径。初始化借助队列或栈存节点位置信息,路径长度设置一个路径记录数组,每一个位置上记录的是其上一步的节点位置(默认只一条最优路径)BFS从起点往四周搜索(搜索顺序决定方向优先级),不越矩阵范围一个节点有效(能进入某种存储结构)满足,不是墙 && 新路探索到终点,循环结束恢复路径从终点开始读路径数组记录每一个结点,直到溯回起点得到逆路径import java.util.LinkedList;import java.原创 2021-03-30 17:12:29 · 469 阅读 · 0 评论 -
袋子里最少数目的球
class Solution { public int minimumSize(int[] nums, int maxOperations) { int left=1; int right=maxf(nums); while(left <= right) { int y=(left+right)/2; int ope = 0; for(int n:nums).原创 2021-02-16 18:43:33 · 82 阅读 · 0 评论 -
重新排列后的最大子矩阵
class Solution { public int largestSubmatrix(int[][] matrix) { int m = matrix.length; int n = matrix[0].length; //For each column, find the number of consecutive ones ending at each position. for(int i=1; i<m; i+...原创 2021-02-03 17:12:15 · 122 阅读 · 0 评论 -
找出第 K 大的异或坐标值
class Solution { public int kthLargestValue(int[][] matrix, int k) { int n=matrix.length,m=matrix[0].length; int[][] matval = new int[n][m]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { ...原创 2021-02-01 16:22:24 · 136 阅读 · 0 评论 -
回文串分割,判断一个字符串是否能分割为三个子串,且满足三个子串皆为回文串
class Solution { public boolean checkPartitioning(String s) { int len = s.length(); int head = 0; int tail = len-1; int prehead = head; int behead = head; if(checkApart(head,tail,s)) return..原创 2021-02-01 16:16:12 · 706 阅读 · 2 评论 -
需要教语言的最少人数
class Solution { public int minimumTeachings(int n, int[][] languages, int[][] friendships) { //交友 //相互之前能交流的好友不去统计 //不能交流的统计 //最后将不能交流用户所会的语言累计起来 //最后的答案就是 用户数-会的人最多的语言数 //检查每一对好友关系,判断两者是否能交流,不能交流则统计...原创 2021-01-29 17:55:24 · 112 阅读 · 0 评论 -
解码异或后的排列
class Solution { public int[] decode(int[] encoded) { int all = 0; int n = encoded.length; int[] v = new int[n+1]; for(int i=1;i<=n+1;i++) all ^= i; int first_out = 0; for(int i=1;i<n;i+=2) first..原创 2021-01-29 17:53:40 · 278 阅读 · 0 评论 -
生成乘积数组的方案数
class Solution { private int mod = 1000000007; public int[] waysToFillArray(int[][] queries) { int[][] comb; comb = combMatrix(); int[] ans = new int[queries.length]; int index = 0; for(int[] q:queries) ..原创 2021-01-29 17:48:43 · 114 阅读 · 0 评论 -
满足三条件之一需改变的最少字符数
class Solution { public int minCharacters(String a, String b) { int[] abcA = new int[26]; int[] abcB = new int[26]; int ans = Integer.MAX_VALUE; int countA=0, countB=0; for(char c : a.toCharArray()) ...原创 2021-01-25 21:42:29 · 87 阅读 · 0 评论 -
放置盒子
class Solution { public int minimumBoxes(int n) { int level = 1; int count = 0; //计算最大的饱和堆 while((count+(level*(level+1))/2)<n) { count += (level*(level+1))/2; level++; } ...原创 2021-01-25 21:40:23 · 191 阅读 · 0 评论 -
蓝桥杯---Yaroslav and Algorithm
这道题目我不知道他在讲什么,看示例明白就是加1,难道就是加1吗???那题目描述那么多,而且好像真的有东西于是我先试了一下简单的加一import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); scan.nextLine(); int coun原创 2020-11-01 15:18:21 · 355 阅读 · 0 评论 -
蓝桥杯--猴子吃包子--java
猴子吃包子,一个考察四舍五入以及精度的问题。在java,c,c++中对于数据的四舍五入用printf() 就可以搞定在java中数据的精度,就看数据的空间大小,或者说数据类型的范围题目要求的数据规模如下所以在小数位的精度上用float 是不行的 :运行结果如下而 double 就可以了:运行结果如下代码如下:import java.util.Scanner;public class Main{ public static void main(String[] args) {原创 2020-11-01 11:40:48 · 314 阅读 · 2 评论 -
蓝桥杯---16进制转8进制---java实现(耗时156ms)
题目:这道题对于java来讲,乍一看,转换是一行代码就可以搞定的。//octo是八进制字符串;//hex是16进制字符串;String octo = Integer.toOctalString(Integer.valueOf(hex, 16));16进制先转成10进制再转成8进制,调用函数还是so easy的!不过运行后的结果是:运行错误知道吗,在测试集中存在长度为10万的16进制字符串,这意味着,整型的溢出。int类型不行,Long当然也不行!所以这样的方法自然行不通!接着我就原创 2020-10-16 21:23:22 · 141 阅读 · 0 评论 -
递归(走楼梯,阶乘)
递归我记得,我最先接触的递归的例子是汉诺塔。但是本文现在不讲汉诺塔,嘿嘿!我们从简单的开始递归现象发生于递归函数,递归函数是直接或者间接的调用自己本身的这么一种函数。举个例子 求从1连成乘到n的积,也就是求 n! 。其中就是重复的去用一个数乘一个数,接着再乘一个数,一直乘到100;我们用递归完成,public int recursion(int i,int n){ if(i==n...原创 2020-03-13 22:06:30 · 296 阅读 · 0 评论 -
判断回文序列 思路
在学c语言数据结构的时候写过一篇文章用队列与栈相结合进行判断一个数是否为回文数。队列的性质是先进先出栈的性质是先进后出那么当一个数组中的元素按同一种顺序进入队列与栈,然后依次比较队列与栈的输出,若有不同则该数列为非回文数列。队列与栈判断回文数现有另一种方式更便捷的去判断一个回文数对折是重叠的,设该回文数中有n个元素组成那么第1个元素的值 value(1) = value(n)val...原创 2020-01-29 20:34:26 · 913 阅读 · 0 评论 -
利用链栈与链队判断回文数
栈:一种只能从一端进出元素的具有先进后出性质的线性表。队:一种只能在一端进另一端出的具有先进先出性质的线性表。链栈与链队其储存方式是链式的。回文数:从左读到右与从右读到左一样的正整数。如12321,112211,99。利用队和栈来做这样的一个判断是非常容易理解的。我们运用的就是他们各自的性质。栈为先进后出 如输入 1 2 3 出3 2 1队尾先进先出 如输入 1 2 3 出1 2...原创 2019-04-07 10:41:51 · 1872 阅读 · 0 评论 -
1,2,3,.....n 的栈的所有输出情况
栈的最鲜明的特征就是先进后出判断一个按从小到大输入栈的序列是否为栈的输出规则为,在数 n 的后面(n > 2), 后1 ,2,3 ,n-1的排列得是降序数的排列得是降序例如进栈的顺序是1234那么 4 2 3 1是不可能的 因为 在 4 的后面 1,2,3 这三个数只能 排成 3 2 1还如 3 1 2 4 ,也是不对的 ,在3 的后面 1 2 得按降序的来 按 2 ...原创 2019-10-25 22:06:04 · 1339 阅读 · 1 评论 -
利用顺序栈实现迷宫穷举走法 (光标移动函数,延时函数)
顺序栈:一种存储结构为顺序具有先进后出性质的线性表。穷举法走迷宫:就是探索式走法,设定一个探索顺序和初始方向比如开始探索上,逆时针轮,上、左、下、右。我的迷宫是用一个1010的字符数组存储的。栈对与实现穷举法实现迷宫具有独特的优势。这种优势总结为一点就是吞吐轨迹点。怎么讲呢,从上往下第一个‘’(星号)为起点,第二个为终点。我这里是设开始方向为右侧,按顺时针方向转。即右、下、左、上。...原创 2019-04-09 18:54:57 · 444 阅读 · 1 评论 -
对于集合求其所有子集
学过集合我们都知道对于一个元素为n的集合而言,其所有子集的个数是2ⁿ+1个巧的很的是如果说你一开始不知道怎么下手对于这个问题而有对二进制有所了解的话进过一小段时间的对视那就会发现其和二进制会有多么的相近点为什么这么讲二进制 是关于2的一个计数进制 满二进一这是我们所知道的一个三位的二进制 其范围是 0-8 共九个数集合中有三个数,其中所有的情况是2³+1 =9看到这里 就不难...原创 2019-10-25 23:15:28 · 349 阅读 · 0 评论 -
顺序队列的循环 浪费一个空间法及标志位法
@TC新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;全新的 KaTeX数学公式 ...原创 2019-04-07 07:48:52 · 1331 阅读 · 0 评论 -
全排列
全排列就是集合求所有可能的排列方式下面以数组的全排列为例,数组长度为n在数组的第一位上有n种可能,在第二位上有n-1种可能以此类推当每确定一位的时候就产生一个新的排列并且下一位的可能性就会减少一种情况。当确定到最后一位的时候排列结束。首先每一位上我们要把每一种可能的情况尝试遍,在尝试一种情况的时候下一位的情况会受到上一位的影响,所以他们之间是有联系的。我们用递归的思维去解答用一个函数...原创 2020-03-09 23:38:23 · 251 阅读 · 0 评论 -
Java Queue与Stack的使用(以判断一个数是否为回文数演示为例)
public class Solution { public static void main(String[] args) throws UnsupportedEncodingException { Scanner scanner = new Scanner(System.in); Queue<Character> queue = new LinkedList<Ch...原创 2020-02-06 23:29:33 · 374 阅读 · 0 评论 -
回文序列之链表
之前我写了两篇关于回文性质的文章。现在遇到一种特殊的回文实例,即链表的回文性质确定。给一个单向链表,如何确定其为回文链表?确定回文的最快方法为找到中间元素,左右开弓,比较对折重叠位置上元素值是否相等。要解决这个问题,得先找到链表的中间位置,怎么找?一个方法快慢指针法。一个指针以单个单个元素向前推进,另一个指针一次前进两个单位(每个元素为一单位)这样当快指针到达了链表末端,慢指针就在链...原创 2020-02-04 23:14:41 · 147 阅读 · 0 评论 -
旋转图像 思路 java实现
上图是题目描述来源LeetCode我的第一种解法是 将所给二维数组由外向内分成n/2上取整层然后逐层各元素顺时针移动90度举个例子最外层像这样移动,那么当完成对倒数第二个元素的移动时该层的旋转也就完成了 那上面的例子来说就是在第一层完成对2的移动时就已经完成了最外层的旋转,再往里只有一个元素,不用旋转。时间复杂度分析(n-1)*4+(n-3)**4+…+1 = O(n^2)算法实...原创 2020-01-27 19:09:07 · 308 阅读 · 0 评论 -
求最大公约数
这里求最大公约数采用 求余交换的的递归方法求A数与B数的最大公约数第一步 求 A = B第二步 B = A%B当B等于零时 返回数A否则循环上面的过程比如 12 和 4 A = 4,B=12(A,B大小随便)A = B = 12B = A%B = 4A = B = 4B = A%B = 0输出 A :4递归实现public int gcd(int a,int b){...原创 2020-03-11 22:53:33 · 87 阅读 · 0 评论 -
对于数组元素的删除
在程序算法上我们经常会遇到 对于一个数组来讲删除奇数位,直到剩下最后一个元素。这样的题目可以有不同的问的形式,最后呢是引出来数组按一定规则,删掉元素,问最后怎么样。这样的问题,如果我们会利用数组本身的一些属性,那么就不用真的去删除元素,或者再创建一个新的数组来装变化后的元素,这些操作的目的都是只有一个就是真的或者模拟删除的过程。从数组中真的删除元素是很麻烦的,删掉一个元素之后我们要做的是...原创 2020-03-12 13:15:28 · 1040 阅读 · 0 评论