- 博客(49)
- 收藏
- 关注
原创 二叉树的镜像
[编程题]-二叉树的镜像【解题思路】 源二叉树: 8 / \ 6 10 / \ / \ 5 7 9 11镜像二叉树: 8 / \ 10 6 / \ / \ 11 9 7 5通过上述图示,可以看出,源二叉树镜面成像变成镜像二叉树。 一个节点的左右节点进行互换,可以通过递 归来实现。 【示例代码】...
2020-01-15 09:37:33 126
原创 火车进站
[编程题]-火车进站 【解题思路】 思路为用三个变量分别存储: 待进站火车 站中火车(用Stack存储) 已出站火车 具体实现思路: 第一种: 采用递归的方法,递归函数的参数为当前待进站火车、站中火车、已出站火车的值所组成的三元组,递归结 束条件是,未进站火车和站中火车均为空,此时输出已出站火车即为所有出站的一种可能,递推关系为对于 当前情况有让下一辆...
2020-01-09 09:24:59 677
原创 统计同成绩学生人数
[编程题]-统计同成绩学生人数【解题思路】 输入和计算过程: 输入人数 循环变量,输入分数 输入目标分数 循环变量分数数组,计算和目标分数相等的分数出现的频次 打印输出目标分数出现的频次 【示例代码】import java.util.Scanner;public class Main { public static void main...
2020-01-08 19:32:40 248
原创 洗牌
[编程题]-洗牌【解题思路】 每次读取一个数之后,算出他经过k次洗牌后的位置,只用一个长度为2n数组用来输出 根据当前数的位置, 可以算出经过一次洗牌后的位置 如果当前数小于等于n(即在左手),则它下次出现的位置是 2*当前位置-1 如果当前位置大于n(即在右手), 则它下次出现的位置是 2*(当前位置 - n) 【示例代码】import java...
2020-01-07 20:41:27 145
原创 饥饿的小易
[编程题]-饥饿的小易[解题思路] 小易的移动公式:f(x) = 4*x + 4 g(x) = 8*x + 7计算可以得出两个规律:1. g(f(x)) = f(g(x)) 即f和g的执行顺序没有影响 2. f(f(f(x))) = g(g(x)) 即做3次f的变换等价于做2次g的变换由规律1可以得出对于一个可行方案,可以调整其变换顺序。比如:ffffg...
2020-01-06 15:58:49 287
原创 另类加法
[编程题]-另类加法 【解题思路】 二进制加法特点。 位的异或运算跟求'和'的结果一致: 异或 1^1=0 1^0=1 0^0=0 求和 1+1=0 1+0=1 0+0=0位的与运算跟求'进位‘的结果一致: 位与 1&1=1 1&0=0 0&0=0 进位 1+1=1 1+0=0 0+0=0...
2020-01-05 17:37:39 99
原创 尼科彻斯定理
[编程题]-尼科彻斯定理【解题思路】 该题目本身不难,考察数学功底。 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 观察规律,总结归纳,连续奇数求和就是等差数列求和,难点立即转换为等差数列的首项,得出首项 a = m* (m-1)+1【示例代码】import java.io.BufferedRe...
2020-01-04 09:16:46 502 1
原创 组个最小数
[编程题]-组个最小数【解题思路】 该题目的输入数据是由 10 个数字组成,表示 0 - 9 出现的次数,组成最小数满足下面条件即可: 除0以外1-9中按照从小到大的顺序,将最小的数字输出1次 输出所有出现的0 输出1-9中按照从小到大的顺序,将每个数子输出出现的次数(第一位输出的数字会在第一次输出的时 候减去1) 【示例代码】import j...
2020-01-03 09:07:48 237
原创 超长正整数相加
[编程题]-超长正整数相加【解题思路】 Java语言处理该问题,优势比较大,参考BigInteger类就可以处理。核心API考察,如果API限制,可以考虑 采用字符串解析处理。 【示例代码】 import java.util.*;import java.math.BigInteger;public class Main{ public static...
2020-01-02 09:35:08 123
原创 跟奥巴马一起编程
[编程题]-跟奥巴马一起编程 【解题思路】 整体思路:先接受输入获取到行数,字符; 然后第一行输出 ,中间行输出,最后一行输出。 第一行输出:输出指定列数个的指定字符,比如:3 个 a 中间行输出:只在第一列和最后一列输出a , 中间行数为列数的50% , 如:1 最后一行输出:同第一行 a a a a a a a a【示例代码】...
2020-01-01 15:06:02 127
原创 生成格雷码
[编程题]-生成格雷码【解题思路】: 递归的思路是n位gray码是由n-1位gray码生成,举个例子简单一些: 比如求n=3的gray码,首先知道n=2的gray码是(00,01,11,10) 那么n=3的gray码其实就是对n=2的gray码首位添加0或1生成的,添加0后变成(000,001,011,010) 添加1后需要顺序反向就变成(110,111,101,100)...
2019-12-31 09:34:14 201 1
原创 无缓存交换
[编程题]-无缓存交换【解题思路】: 下面给出位运算的理论计算基础: x ^ x == 0 x ^ 0 == x 设M,N是常数,且a=M,b=N,则交换使用异或运算交换a和b的过程如下: a = a^b=M^N; b = a^b = M^N^N = M^0 = M;//b交换成功 a = a^b = M^N^M = M^M^N = 0^N = N;//a交换...
2019-12-30 09:36:24 151
原创 构建乘积数组
[编程题]-构建乘积数组 【解题思路】: B[i]的值可以看作下图的矩阵中每行的乘积。 下三角用连乘可以很容求得,上三角,从下向上也是连乘。 因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按 上三角中的分布规律,把另一部分也乘进去。 【示例代码】:public class Solution { p...
2019-12-28 09:34:34 98
原创 个位数统计
[编程题]-个位数统计【解题思路】: 将给定的数字按照每位拆分为单个数字然后保存在list中,每碰到一个相同的数字就值加一,扫描 完整个字符串后遍历输出list集合即可。 【示例代码】:import java.util.*;public class Main { public static void main(String[] args){ ...
2019-12-27 22:33:02 153
原创 机器人走方格I
[编程题]-机器人走方格I 【解题思路】: 机器人在XY的矩阵中走,每一步都有两种选择:要么向下、要么向右。 如果向下走,问题就变成:求(X-1)Y矩阵中机器人的走法; 如果向右走,问题就变成:求X*(Y-1)矩阵中机器人的走法; 显然是递归的思想! 既然是递归,再考虑退出条件:当整个矩阵只有一行 或 一列的时候只有一种走法。 【示例代码】:p...
2019-12-24 20:50:38 120
原创 Fibonacci数列
[编程题]-Fibonacci数列【解题思路】: 首先构建一个Fibonacci数列,然后从该数列中找到与n最接近的值 在构建数列的时候,如果使用递归,就会因重复计算产生成倍的时间代价,所以用数组的形式 即:A[n]=A[n-1]+A[n-2] 但是数组又会产生额外的空间花销,考虑到每次迭代只会用前两项的值,所以我们可以只用三个 变量 a b c分别表示每次...
2019-12-23 19:30:55 111
原创 数字颠倒
[编程题]-数字颠倒 【题目解析】: 本题也是一个逆序问题的变种,关键在于处理0的情况。 【解题思路】: 本题关键思路: 每次取得当前数的个位数然后拼接到目标数的最前面即完成倒序。 num%10取得个位数, Num/10进入下一轮循环 【示例代码】: import java.util.*;public class Main{ p...
2019-12-12 22:07:30 143
原创 末尾0的个数
[编程题]-末尾0的个数 【解题思路】: 任意挑选几个数字进行分解质因数,例如: 6 = 2*3 15 = 3*5 64 = 2*2*2*2*2*2 = 2^6 100 = 2^2 * 5^2 576 = 2^6 * 3^2 那么我们在计算n的阶乘时,实际上就是把所有小于等于n的正整数分解成质因数,然后再将其乘 到一起,那么末尾0的个数实际上就是2*...
2019-12-09 22:17:48 238
原创 n个数里最小的k个
[编程题]-n个数里最小的k个 【解题思路】:排序+分区: 找到下标为k的位置,则可知,前k小的都在左边,排序输出即可。 【示例代码】: import java.util.*;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner...
2019-12-07 17:46:26 100
原创 删数
[编程题]-删数 【解题思路】: 这里我们用到了集合ArrayList,当然你也可以使用其他的集合。存放n个数,且 都是从0到n-1的数字。因为每次删除的都是当前位置的后面第2个,那么我们就可以这样写: (i+2)%size; 当i==0的时候,我们移除的就是2号下标,接着需要移除4号下标,那么新的i = (i+2)%size; 那么结束条件应该是什么?我们要...
2019-12-06 19:31:41 106
原创 求最小公倍数
[编程题]-求最小公倍数【解题思路】: 求最小公倍数: 两个数a,b的最小公倍数是a*b/gcd(a,b)。由于两个数的乘积等于这两个数的最大公约数与最小公 倍数的积,即(a,b)× [a,b] = a × b 所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最 小公倍数。 求最大公约数: 1. a/b,令r为所得余数(0≤r...
2019-12-04 15:42:27 232
原创 不要二
[编程题]-不要二【解题思路】:就是每四行四列为一个周期pattern相同如下的图案: ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 只要数清楚,每个4行中, i或i+1行的蛋糕数为 (n / 4) * 2 + (n % 4 < 2 ? n % 4 : 2) i+2或i+3行的蛋糕数为 ((...
2019-12-03 23:17:39 136
原创 n个数里出现次数大于等于n/2的数
[编程题]-n个数里出现次数大于等于n/2的数 【解题思路】: 关键方法: str.split(" "):按照空格切分字符串 Integer.valueOf(str):将数字字符串转为int 【示例代码】:import java.util.*;public class Main { public static void main(String[...
2019-12-01 10:41:14 183
原创 计算糖果
[编程题]-计算糖果【解题思路】: 这道题目的实质是:判断三元一次方程组是否有解及求解。 把题目条件用方程式表示: A-B=Y1; B-C=Y2; A+B=Y3; B+C=Y4; 用消元法求解: A=(Y1+Y3)/2; B=(Y3-Y1)/2=(Y2+Y4)/2; C=(Y4-Y2)/2; 由于题目给出的是整数,要求解也是整 数,这个约束条件也需要注意下 【示...
2019-11-30 22:17:45 125
原创 用两个栈实现队列
[编程题]-用两个栈实现队列【解题思路】: 栈1用来作入队列 栈2用来出队列,当栈2为空时,栈1全部出栈到栈2,栈2再出栈(即出队列) 【示例代码】:import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>()...
2019-11-29 20:36:16 86
原创 神奇的口袋
[编程题]-神奇的口袋【题目解析】: 其实这道题就是一个高中就学过的排列组合问题,这类问题使用递归就可以解决。 【解题思路】: 采用递归思想: ①物品n个,物品体积逐一放入weight[]中 ②递归函数count(int s,int n) : 其中s为剩余物品重量,n为剩余可选的物品个数 则分以下两步递归求解: a.从后往前装,装上we...
2019-11-28 15:59:50 174
原创 删除公共字符
[编程题]-删除公共字符 【题目解析】: 还是一道字符串处理的问题【解题思路】: 最简单的思路就是两层循环遍历,下面将“They are students.”称为字符串1,将“aeiou”称为字符串2。每遍 历到字符串2中的一个字符,就在字符串1中找到相同的字符,找到之后删除它,并将字符串1后面的字符整 体向前移动1位。【示例代码】: impo...
2019-11-27 16:35:36 173
原创 买苹果
[编程题]-买苹果 【题目解析】: 这个题目考察大家观察数字特征的能力【解题思路】: 对数字特征进行分析。 首先,6和8都是偶数。因此,能凑出的个数也一定是偶数。程序中若苹果总数是奇 数,可以直接返回-1。 再次,偶数个苹果数对8取模,其结果只可能为0,2,4,6。若余数为6或者0,则可以直 接用6包装情况处理,不需要回溯购买8包装的情况。若余数为4,只...
2019-11-26 16:48:51 84
原创 合法括号序列判断
[编程题]-合法括号序列判断 【题目解析】: 看到这种括号匹配问题同学们应当第一反应使用栈,只要有这个思路,相信这个问题会迎刃而解。 【解题思路】: 1.碰到")"开始弹出栈顶的"(",如果此时栈为空,则返回false 2.碰到其他内容直接返回false 3.字符串结尾时, 栈非空返回false 【示例代码】:import java.u...
2019-11-25 17:12:29 168
原创 字符串中找出连续最长的数字串
[编程题]-字符串中找出连续最长的数字串 【题目解析】: 这个题目是一道很经典的字符串处理问题,关键点就是将一个完整的字符串转换为单个字符以及判断字符是 否为数字【解题思路】: 用max表示经过的数字长度最大值,count表示数字计数器,当为字母时重置为0 end表示数字尾部,每次满 足数字时,对max进行判断,当max小于于count时,更新max和end ...
2019-11-24 11:13:03 197
原创 数组中的逆序对
[编程题]-数组中的逆序对 【题目解析】:数组的逆序对考题较多,比如示例的数组:[1,2,3,4,5,6,7,0] 那么,它包含逆序对有:{1,0},{2,0}, {3,0},{4,0},{5,0},{6,0},{7,0}总共7个逆序对。再比如数组{7,5,6,4},逆序对总共有5对,{7,5},{7,6},{7,4},{5,4,{6,4}; 【解题思路】:思路1:暴力解法...
2019-11-23 16:52:08 191
原创 汽水瓶
[编程题]汽水瓶 【题目解析】:童鞋们在遇到这种类似数学的问题时,切记不要慌,我们来看一下这个题目。题目表达的意思很明 确,3个空瓶子换一瓶饮料。如果给你10个空瓶,问你可以换多少饮料喝?我们可以在纸上简单画一下,这个题目 的思路就出来了? 【解题思路】:当有n个空瓶时候,我们设总共可以喝total瓶饮料,那么当n>2时,说明我们可以去换饮料喝。3个 换一瓶,那么...
2019-11-22 17:35:29 89
原创 寻找第K大
【题目解析】: 老铁们,相信把快排分区思想理解透彻的你解决这个问题应该得心应手 【解题思路】: 这题应该是用快排的思想:例如找49个元素里面第24大的元素,那么按如下步骤: 1.进行一次快排(将大的 元素放在前半段,小的元素放在后半段),假设得到的中轴为p 2.判断 p - low + 1 == k ,如果成立,直接输出 a[p],(因为前半段有k - 1个大于a[p]的元素,...
2019-11-21 18:48:11 89
原创 统计回文
[编程题]-统计回文 【题目解析】: 童鞋们看到这个题目应该心中一喜,没错就是咱们之前作业题中关于回文的问题,换汤不换药~我们使用 String类提供的方法就可以轻松解决~ 【解题思路】: 判断回文:这里我们首先将用户输入的字符串变为一个个的char,一个指针从开头向后遍历每个char的同时另 一个指针从后向前遍历,当发现字符不相等时说明不是回文串。 查找插入位置:知道...
2019-11-20 20:57:58 105
原创 线程通信相关知识点
关于对象中的等待集(wait set)Object.wait()Object.notify()Object.notifyAll()用来做线程通信的Java中每个对象:等待集1.wait会使线程状态发生变化 RUNNABLE - > WAITING WA...
2019-11-20 20:49:53 139
原创 数据结构基本知识点整理
数据结构复杂度:粗略衡量算法好坏的刻度尺(工具)两个维度:快慢 时间复杂度 (重点)使用空间的情况空间复杂度时间复杂度:直接用运行时间衡量不现实,测试环境多变,不好控制变量前提:如果指定CPU的情况下,单位时间内运行的基本指令个数是固定的如果一个算法需要的指令比另一个算法需要的指令个数小,...
2019-11-20 20:40:23 222
原创 Java实现链表头插、尾插等功能
//前驱 prev previous//后继 next//创建结点class Node { int val; //data|element Node next;//如果next == null表示是最后一个结点 Node(int val) { this.val = val; this.next = null;...
2019-07-25 18:38:26 403
原创 Java实现当前时间的打印与时间的前推和后移
import java.util.Calendar;public class Time{ private int hour; private int minutes; private int second; public Time(int hour,int minutes, int second) { if(hour...
2019-07-25 18:29:34 486
原创 Java实现顺序表的增删改查
public class MyArrayList { private int[] array; //代表的是存在数据的数组 //array.length代表的是数组的容量 private int size; //记录顺序表的已有数据个数 //构造方法 public MyArrayLis...
2019-07-25 18:28:00 944
原创 Java实现当前年月日的打印和年月日的前推和后移
/**Date 存储 年-月-日 信息*原则:一切从用户角度出发*功能: 1) 初始化 1.传入年/月/日 2.不传,今天 2)多少天后的年月日 3)多少天前的年月日*/import java.util.Calendar ;public class Date{ private ...
2019-07-25 18:26:01 378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人