编程题
poison&&
这个作者很懒,什么都没留下…
展开
-
二叉树的镜像
[编程题]-二叉树的镜像【解题思路】 源二叉树: 8 / \ 6 10 / \ / \ 5 7 9 11镜像二叉树: 8 / \ 10 6 / \ / \ 11 9 7 5通过上述图示,可以看出,源二叉树镜面成像变成镜像二叉树。 一个节点的左右节点进行互换,可以通过递 归来实现。 【示例代码】...原创 2020-01-15 09:37:33 · 118 阅读 · 0 评论 -
火车进站
[编程题]-火车进站 【解题思路】 思路为用三个变量分别存储: 待进站火车 站中火车(用Stack存储) 已出站火车 具体实现思路: 第一种: 采用递归的方法,递归函数的参数为当前待进站火车、站中火车、已出站火车的值所组成的三元组,递归结 束条件是,未进站火车和站中火车均为空,此时输出已出站火车即为所有出站的一种可能,递推关系为对于 当前情况有让下一辆...原创 2020-01-09 09:24:59 · 671 阅读 · 0 评论 -
统计同成绩学生人数
[编程题]-统计同成绩学生人数【解题思路】 输入和计算过程: 输入人数 循环变量,输入分数 输入目标分数 循环变量分数数组,计算和目标分数相等的分数出现的频次 打印输出目标分数出现的频次 【示例代码】import java.util.Scanner;public class Main { public static void main...原创 2020-01-08 19:32:40 · 237 阅读 · 0 评论 -
洗牌
[编程题]-洗牌【解题思路】 每次读取一个数之后,算出他经过k次洗牌后的位置,只用一个长度为2n数组用来输出 根据当前数的位置, 可以算出经过一次洗牌后的位置 如果当前数小于等于n(即在左手),则它下次出现的位置是 2*当前位置-1 如果当前位置大于n(即在右手), 则它下次出现的位置是 2*(当前位置 - n) 【示例代码】import java...原创 2020-01-07 20:41:27 · 137 阅读 · 0 评论 -
饥饿的小易
[编程题]-饥饿的小易[解题思路] 小易的移动公式: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 · 274 阅读 · 0 评论 -
另类加法
[编程题]-另类加法 【解题思路】 二进制加法特点。 位的异或运算跟求'和'的结果一致: 异或 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 · 92 阅读 · 0 评论 -
尼科彻斯定理
[编程题]-尼科彻斯定理【解题思路】 该题目本身不难,考察数学功底。 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 · 494 阅读 · 1 评论 -
组个最小数
[编程题]-组个最小数【解题思路】 该题目的输入数据是由 10 个数字组成,表示 0 - 9 出现的次数,组成最小数满足下面条件即可: 除0以外1-9中按照从小到大的顺序,将最小的数字输出1次 输出所有出现的0 输出1-9中按照从小到大的顺序,将每个数子输出出现的次数(第一位输出的数字会在第一次输出的时 候减去1) 【示例代码】import j...原创 2020-01-03 09:07:48 · 228 阅读 · 0 评论 -
超长正整数相加
[编程题]-超长正整数相加【解题思路】 Java语言处理该问题,优势比较大,参考BigInteger类就可以处理。核心API考察,如果API限制,可以考虑 采用字符串解析处理。 【示例代码】 import java.util.*;import java.math.BigInteger;public class Main{ public static...原创 2020-01-02 09:35:08 · 112 阅读 · 0 评论 -
跟奥巴马一起编程
[编程题]-跟奥巴马一起编程 【解题思路】 整体思路:先接受输入获取到行数,字符; 然后第一行输出 ,中间行输出,最后一行输出。 第一行输出:输出指定列数个的指定字符,比如:3 个 a 中间行输出:只在第一列和最后一列输出a , 中间行数为列数的50% , 如:1 最后一行输出:同第一行 a a a a a a a a【示例代码】...原创 2020-01-01 15:06:02 · 118 阅读 · 0 评论 -
生成格雷码
[编程题]-生成格雷码【解题思路】: 递归的思路是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 · 187 阅读 · 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 · 140 阅读 · 0 评论 -
构建乘积数组
[编程题]-构建乘积数组 【解题思路】: B[i]的值可以看作下图的矩阵中每行的乘积。 下三角用连乘可以很容求得,上三角,从下向上也是连乘。 因此我们的思路就很清晰了,先算下三角中的连乘,即我们先算出B[i]中的一部分,然后倒过来按 上三角中的分布规律,把另一部分也乘进去。 【示例代码】:public class Solution { p...原创 2019-12-28 09:34:34 · 89 阅读 · 0 评论 -
个位数统计
[编程题]-个位数统计【解题思路】: 将给定的数字按照每位拆分为单个数字然后保存在list中,每碰到一个相同的数字就值加一,扫描 完整个字符串后遍历输出list集合即可。 【示例代码】:import java.util.*;public class Main { public static void main(String[] args){ ...原创 2019-12-27 22:33:02 · 142 阅读 · 0 评论 -
机器人走方格I
[编程题]-机器人走方格I 【解题思路】: 机器人在XY的矩阵中走,每一步都有两种选择:要么向下、要么向右。 如果向下走,问题就变成:求(X-1)Y矩阵中机器人的走法; 如果向右走,问题就变成:求X*(Y-1)矩阵中机器人的走法; 显然是递归的思想! 既然是递归,再考虑退出条件:当整个矩阵只有一行 或 一列的时候只有一种走法。 【示例代码】:p...原创 2019-12-24 20:50:38 · 110 阅读 · 0 评论 -
Fibonacci数列
[编程题]-Fibonacci数列【解题思路】: 首先构建一个Fibonacci数列,然后从该数列中找到与n最接近的值 在构建数列的时候,如果使用递归,就会因重复计算产生成倍的时间代价,所以用数组的形式 即:A[n]=A[n-1]+A[n-2] 但是数组又会产生额外的空间花销,考虑到每次迭代只会用前两项的值,所以我们可以只用三个 变量 a b c分别表示每次...原创 2019-12-23 19:30:55 · 101 阅读 · 0 评论 -
数字颠倒
[编程题]-数字颠倒 【题目解析】: 本题也是一个逆序问题的变种,关键在于处理0的情况。 【解题思路】: 本题关键思路: 每次取得当前数的个位数然后拼接到目标数的最前面即完成倒序。 num%10取得个位数, Num/10进入下一轮循环 【示例代码】: import java.util.*;public class Main{ p...原创 2019-12-12 22:07:30 · 134 阅读 · 0 评论 -
末尾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 · 222 阅读 · 0 评论 -
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 · 86 阅读 · 0 评论 -
删数
[编程题]-删数 【解题思路】: 这里我们用到了集合ArrayList,当然你也可以使用其他的集合。存放n个数,且 都是从0到n-1的数字。因为每次删除的都是当前位置的后面第2个,那么我们就可以这样写: (i+2)%size; 当i==0的时候,我们移除的就是2号下标,接着需要移除4号下标,那么新的i = (i+2)%size; 那么结束条件应该是什么?我们要...原创 2019-12-06 19:31:41 · 99 阅读 · 0 评论 -
求最小公倍数
[编程题]-求最小公倍数【解题思路】: 求最小公倍数: 两个数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 · 222 阅读 · 0 评论 -
不要二
[编程题]-不要二【解题思路】:就是每四行四列为一个周期pattern相同如下的图案: ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 只要数清楚,每个4行中, i或i+1行的蛋糕数为 (n / 4) * 2 + (n % 4 < 2 ? n % 4 : 2) i+2或i+3行的蛋糕数为 ((...原创 2019-12-03 23:17:39 · 126 阅读 · 0 评论 -
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 · 178 阅读 · 0 评论 -
计算糖果
[编程题]-计算糖果【解题思路】: 这道题目的实质是:判断三元一次方程组是否有解及求解。 把题目条件用方程式表示: 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 · 117 阅读 · 0 评论 -
用两个栈实现队列
[编程题]-用两个栈实现队列【解题思路】: 栈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 · 74 阅读 · 0 评论 -
神奇的口袋
[编程题]-神奇的口袋【题目解析】: 其实这道题就是一个高中就学过的排列组合问题,这类问题使用递归就可以解决。 【解题思路】: 采用递归思想: ①物品n个,物品体积逐一放入weight[]中 ②递归函数count(int s,int n) : 其中s为剩余物品重量,n为剩余可选的物品个数 则分以下两步递归求解: a.从后往前装,装上we...原创 2019-11-28 15:59:50 · 164 阅读 · 0 评论 -
删除公共字符
[编程题]-删除公共字符 【题目解析】: 还是一道字符串处理的问题【解题思路】: 最简单的思路就是两层循环遍历,下面将“They are students.”称为字符串1,将“aeiou”称为字符串2。每遍 历到字符串2中的一个字符,就在字符串1中找到相同的字符,找到之后删除它,并将字符串1后面的字符整 体向前移动1位。【示例代码】: impo...原创 2019-11-27 16:35:36 · 162 阅读 · 0 评论