算法
ppaaaaaaa
这个作者很懒,什么都没留下…
展开
-
力扣565题--Java关于for循环优化的问题
力扣565题,Java for循环优化原创 2022-07-17 15:58:34 · 350 阅读 · 1 评论 -
差分数组——简单解决数组的频繁操作问题
差分数组上一文中说过***前缀和主要适用的场景是原数组不会被改变的情况下,频繁查询某个区间的累加和***;那么差分数组的主要使用场景是***频繁对原始数组的某个区间的元素进行增删***,所以两者的区别就是是否需要对原始数组进行改变。差分数组和前缀和的思路一样,都需要先创建一个新的差分数组diff,差分数组中存储的都是原数组当前元素与前一个元素的差,即:diff[i] = nums[i] - nums[i-1],由此我们可以构建一个差分数组,并给数组中的每个元素赋值;int[] diff = new i原创 2022-03-09 09:40:19 · 277 阅读 · 0 评论 -
前缀和解法——解决数组问题不再需要反复遍历
前缀和解法1.前缀和主要适用的场景是***原始数组不会被修改的情况下,频繁查询某个区间的累加和***2.前缀和的核心代码:class PrefixSum { // 前缀和数组 private int[] prefix; /* 输入一个数组,构造前缀和 */ public PrefixSum(int[] nums) { prefix = new int[nums.length + 1]; // 计算 nums 的累加和 f原创 2022-03-08 21:02:19 · 612 阅读 · 0 评论 -
理解摩尔投票法
算法题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字(数组非空,一定存在这个数字)。摩尔投票法算法的本质思想就是:抵消,抵消,抵消,到不能再抵消为止。首先,我们先来了解一下是如何抵消的,抵消就是让数组中任意两个不同的元素进行抵消,一直抵消到最后剩下的就是出现次数唱过数组长度一半的数字了;具体的我们可以举一个例子来说明一下,给定的数组为{1, 2, 3, 2, 2, 2, 5, 4, 2 },具体抵消的过程为:先声明一个数组array,用来存放当前无法抵消的数字; 遍历...原创 2020-05-25 09:25:11 · 345 阅读 · 0 评论 -
通过前、中、后序遍历序列中的任意两个构造二叉树【Java实现】
二叉树的前序、中序和后序遍历是二叉树学习中的一个重点,也是二叉树中很基础的一部分,需要我们熟练的运用;通常已知二叉树,很多同学都能很轻松的得到其前序、中序和后序遍历的队列,甚至层序遍历也不在话下,如果是反过来呢?如果是理解不够的同学就会觉得头疼,有点不知道怎么下手,这里我将分享一下我的汇总,可能方法不是最优的,但是一定能帮助理解。在此之前呢,我们需要再回顾一下二叉树的前序、中序和后序遍历的特点;前序遍历:遍历后的序列中节点按照[ 根节点 | 左子树 | 右子树 ]排序,以上图所示为例[ 1 .原创 2020-05-20 13:56:13 · 598 阅读 · 2 评论 -
不使用乘除和任何判断、循环计算1+2+...+n【逻辑符短路】
题目来自于《剑指offer(第2版)》,原题是:求1+2+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。首先,如果我们只是求1+2+...+n的话,正常情况下会有三种方法:公式计算、迭代、递归//方法一:公式计算,利用等差数列前n项和的公式就即可public int sumNums(int n){ return (1 + n) * n / 2;}//方法二:迭代计算public int...原创 2020-05-10 10:22:40 · 443 阅读 · 0 评论 -
通过位运算实现加法(不使用加减乘除实现加法)
能否不使用加减乘除而实现两数的相加呢?当然可以,接下来将以最简单的方式理解用位运算实现两数相加。首先,十进制的加法大家都非常熟悉,下面我们将十进制的加法进行解析,可分为下面这三步:将数字的各位分别相加,先不管进位的问题 计算产生进位的数字 把上面两步的结果进行相加例如:12 + 15个位和十位数字相加,先不管进位的问题:2 + 5 = 7(个位相加),1 + 1 =...原创 2020-05-05 21:52:57 · 861 阅读 · 0 评论 -
详细的十大经典排序算法总结
欢迎大家在语雀进行学习交流原创 2020-03-23 10:31:11 · 215 阅读 · 0 评论 -
蓝桥杯--十六进制转十进制--Java代码
问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。样例输入 FFFF样例输出 65535首先,先讲一下公式(该公式适合运用于任何进制转十进制): 系数:所给数字每一位上的数据;基数:所给的数字为X进制,基数...原创 2019-07-08 10:56:28 · 175 阅读 · 0 评论 -
蓝桥杯--十进制转十六进制--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。 给出一个非负整数,将它表示成十六进制的形式。输入格式 输入...原创 2019-07-08 15:02:23 · 310 阅读 · 0 评论 -
蓝桥杯--数列排序--Java代码
问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200输入格式 第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。输出格式 输出一行,按从小到大的顺序输出排序后的数列。样例输入 5 8 3 6 4 9样例输出 3 4 6 8 9代码如下:impo...原创 2019-07-07 21:44:56 · 185 阅读 · 0 评论 -
蓝桥杯--Fibonacci数列--Java代码
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式 输入包含一个整数n。输出格式 输出一行,包含一个整数,表示Fn除以10007的余数。 说明:在本题中,答案是要求Fn除以1...原创 2019-07-07 21:22:07 · 227 阅读 · 0 评论