
牛客——剑指Offer
高压锅_1220
宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒!
心中有阳光,脚下有力量!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
要求打印出来的不能重复
利用1、2、2、3、4这5个数字,用Java写一个main函数,打印出所有不同的排列,如12234、21234等,要求打印出来的不能重复package MonthSep.HWday04;public class HW04 { public static int count = 0; public static void main(String[] args) { ...转载 2018-09-25 10:21:15 · 231 阅读 · 1 评论 -
把数组里的数组合全部列出 (递归法)
把数组里的数组合全部列出 ,比如1和2列出来为1, 2,,12,21package MonthSep.HWday04;import java.util.Arrays;import java.util.LinkedList;import java.util.List;// 把数组里的数组合全部列出 递归法public class HW01 { public static ...转载 2018-09-25 09:15:58 · 1301 阅读 · 1 评论 -
菲波那切数列
试用递归法编程计算菲波那切数列的通项飞f(n),已知f1 = 1, f2 = 1,以后每项都是前两项的和package MonthSep.HWday04;import java.util.Scanner;public class HW02 { public static int k = 0; public static void main(String[] args)...转载 2018-09-25 09:24:36 · 645 阅读 · 1 评论 -
把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}...转载 2018-09-17 17:04:52 · 231 阅读 · 1 评论 -
对称的二叉树
请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。boolean isSymmetrical(TreeNode pRoot){ if(pRoot == null) return true; return f(pRoot.left, pRoot.right); } boolean ...转载 2018-09-17 16:57:34 · 152 阅读 · 0 评论 -
旋转数据的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。public class HW09 { // 寻找分界点 public int minNum...转载 2018-09-17 15:18:43 · 224 阅读 · 0 评论 -
平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路:这种做法有很明显的问题,在判断上层结点的时候,会多次重复遍历下层结点,增加了不必要的开销。如果改为从下往上遍历,如果子树是平衡二叉树,则返回子树的高度;如果发现子树不是平衡二叉树,则直接停止遍历,这样至多只对每个结点访问一次。package MonthSep.HWday03;public class HW08 ...转载 2018-09-17 11:12:21 · 155 阅读 · 1 评论 -
求1+2+3+...+n
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。package MonthSep.HWday03;public class HW06 { // 第一种解法 public int Sum_Solution1(int n){ int sum = (int) (Mat...转载 2018-09-17 10:27:40 · 244 阅读 · 0 评论 -
构建乘积数组
给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。package MonthSep.HWday03;// 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]...转载 2018-09-17 10:17:00 · 136 阅读 · 1 评论 -
二叉树的镜像
操作给定的二叉树,将其变换为源二叉树的镜像。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/publi...转载 2018-09-17 09:02:32 · 140 阅读 · 0 评论 -
不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。import java.math.BigInteger;public class Solution { public int Add(int num1,int num2) { BigInteger bi1=new BigInteger(String.valueOf(num1));...转载 2018-09-17 08:58:04 · 139 阅读 · 0 评论 -
二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:递归算法/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int ...转载 2018-09-17 08:48:47 · 261 阅读 · 1 评论 -
Java编程刷题须知
//输入一组数据并输出 Scanner sc = new Scanner(System.in); String str=sc.nextLine(); System.out.printf("%s\n",str); //输入多组数据并输出 Scanner sc = new Scanner(System.in); String str; while(sc.ha...翻译 2018-06-01 15:23:05 · 609 阅读 · 0 评论 -
彩色宝石项链
题目描述 有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能够拿到最多的宝石...翻译 2018-05-06 11:22:33 · 158 阅读 · 0 评论 -
孩子们的游戏(圆圈中最后剩下的数)
每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一个小朋友...转载 2018-09-18 09:12:26 · 239 阅读 · 0 评论 -
数组中重复的数字
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。public class HW14 { public boolean duplicate(int numbers[],i...转载 2018-09-18 10:04:46 · 157 阅读 · 0 评论 -
机器人的运动范围
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?package MonthOCT.HWday01;...转载 2018-10-09 17:18:28 · 171 阅读 · 0 评论 -
丑数
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路通俗易懂的解释:首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那...转载 2018-10-07 22:26:47 · 812 阅读 · 0 评论 -
按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:/** * 大家的实现很多都是将每层的数据存进ArrayList中,偶数层时进行reverse操作, * 在海量数据时,这样效率太低了。 * (我有一次面试,算法考的就是之字形打印二叉树,用了reverse, * 直接被鄙视了,面...转载 2018-09-23 17:18:07 · 149 阅读 · 0 评论 -
滑动窗口的最大值
给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1},...原创 2018-09-23 16:42:15 · 196 阅读 · 0 评论 -
二叉搜索树的第k个结点
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。//思路:二叉搜索树按照中序遍历的顺序打印出来正好就是排序好的顺序。// 所以,按照中序遍历顺序找到第k个结点就是结果。public class Solution { int index = 0; //计数器 TreeNode Kth...转载 2018-09-23 16:33:27 · 151 阅读 · 0 评论 -
第一个只出现一次的字符
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).package MonthSep.HWday03;// 第一个只出现一次的字符import java.util.HashMap;import java.util.Map;public class HW21 { p...原创 2018-09-23 16:19:52 · 151 阅读 · 0 评论 -
扑克牌顺子
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以...转载 2018-09-23 15:54:23 · 491 阅读 · 0 评论 -
把字符串转换成整数
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。package MonthSep.HWday03;public class HW18 { public int StrToInt(String str){ ...转载 2018-09-18 15:05:55 · 403 阅读 · 0 评论 -
数据流中的中位数
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。import java.util.LinkedList; public class Solution { ...转载 2018-09-18 14:51:52 · 169 阅读 · 0 评论 -
和为S的连续正数序列
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!解题思路:1)由于我们要找的是和为S的连续正数...转载 2018-09-18 11:43:43 · 152 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;...转载 2018-09-18 11:06:51 · 152 阅读 · 0 评论 -
求数列的和
题目描述 数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。 输入描述: 输入数据有多组,每组占一行,由两个整数n(n < 10000)和m(m < 1000)组成,n和m的含义如前所述。 输出描述: 对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。 示例1 输入 81 4 2 2 ...原创 2018-05-06 10:51:23 · 235 阅读 · 0 评论 -
表示数值的字符串
请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串”+100”,”5e2”,”-123”,”3.1416”和”-1E-16”都表示数值。 但是”12e”,”1a3.14”,”1.2.3”,”+-5”和”12e+4.3”都不是。第一种解法/*以下对正则进行解释:[\\+\\-]? -> 正或负符号出现与否\\d* ...翻译 2018-05-17 22:00:55 · 139 阅读 · 0 评论 -
旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。import java.util.ArrayList;public class Solution { p...翻译 2018-04-25 20:27:21 · 132 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack&l...翻译 2018-04-25 17:17:35 · 125 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * public class TreeNode { * int val; ...翻译 2018-04-25 16:41:33 · 127 阅读 · 0 评论 -
从头到尾打印链表
输入一个链表,从尾到头打印链表每个节点的值。 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> list=new ArrayList<Integer>(); ArrayList<Integer...翻译 2018-04-25 16:37:36 · 139 阅读 · 0 评论 -
替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happypublic String replaceSpace(StringBuffer str){ if(str==null){ return null; } StringBuil...翻译 2018-04-25 16:26:42 · 114 阅读 · 0 评论 -
给出n阶方阵里所有数,求方阵里所有数的和
输入描述: 输入有多个测试用例,每个测试用例第一行为一个整数n(n ≤ 1000),表示方阵阶数为n。接下来是n行的数字,每行n个数用空格隔开。 输出描述: 输出一个整数,表示n阶方阵的和 示例1 输入 3 1 2 3 2 1 3 3 2 1 输出 18package HWday02;import java.ut...翻译 2018-05-03 15:25:35 · 11491 阅读 · 0 评论 -
求a+b的和 /
计算a+b的和 每行包行两个整数a和b 对于每行输入对应输出一行a和b的和 输入 1 5 输出 6package HWday02;import java.util.Scanner;public class HWday01 { public static void main(String[] args) { Scanne...翻译 2018-05-03 15:20:46 · 7034 阅读 · 0 评论 -
把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。package HWday05;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;...翻译 2018-05-09 22:58:22 · 142 阅读 · 0 评论 -
二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数package demo5;public class Demo10 { public boolean Find(int target ,int[][] array){ int len=array.le...翻译 2018-04-25 16:17:54 · 135 阅读 · 0 评论 -
翻转单词顺序序列
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 将一行字符串编程字符数...原创 2018-05-02 21:45:53 · 197 阅读 · 0 评论 -
左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 字符串=&gt;char[] str.toCharArray(); 字符...原创 2018-05-02 21:32:55 · 149 阅读 · 0 评论