
剑指offer
dp小王子
讲真的,写博客好累。。。
展开
-
一出现的次数
【题目】求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。public class NumberOf1Between1AndN { pu...原创 2019-03-06 14:19:19 · 123 阅读 · 0 评论 -
找出这两个只出现一次的数字。
【题目】一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。public class FindNumsAppearOnce { public void FindNumsAppearOnce(int[] array, int num1[], int num2[]) { int eO = 0; int eHasOne = 0; for (int...原创 2019-03-06 17:44:18 · 331 阅读 · 0 评论 -
二叉搜索树的第k个结点
【题目】给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。public class KthNode { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNo...原创 2019-03-09 13:29:24 · 259 阅读 · 0 评论 -
和为S的两个数字
【题目】输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。public class FindNumbersWithSum { public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) { ArrayList<Intege...原创 2019-03-07 16:26:39 · 84 阅读 · 0 评论 -
左旋转字符串
【题目】汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!public class LeftRotateString { public String Lef...原创 2019-03-07 16:27:05 · 70 阅读 · 0 评论 -
反转单词序列
【题目】牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?public String...原创 2019-03-07 16:27:25 · 369 阅读 · 0 评论 -
扑克牌顺子
【题目】LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌...原创 2019-03-07 16:28:29 · 241 阅读 · 0 评论 -
约瑟夫问题
【题目】圆圈中剩下的最后的数public class LastRemaining_Solution { public int LastRemaining_Solution(int n, int m) { if (n == 0) { return -1; } if (n == 1) { return 0; } return (LastRemaining_Solut...原创 2019-03-07 16:28:45 · 1992 阅读 · 0 评论 -
求1+2+3+...+n
【题目】求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。public class Sum_Solution { public int Sum_Solution(int n) { int res = n; boolean b = (n > 0) && ((res += Sum_...原创 2019-03-07 16:29:10 · 225 阅读 · 0 评论 -
不用加减乘除做加法
【题目】写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。public class Add { public int Add(int num1, int num2) { int sum = num1; while (num2 != 0) { sum = num1 ^ num2; num2 = (num1 & num2) << ...原创 2019-03-07 16:29:31 · 113 阅读 · 0 评论 -
字符串转换成整数
【题目】将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。public class StrToInt { public int StrToInt(String str) { if (str == null || str.equal...原创 2019-03-07 16:29:50 · 538 阅读 · 0 评论 -
正则表达式匹配
【题目】请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配public class ZhengZeMatch { public boolean match(c...原创 2019-03-07 17:34:47 · 100 阅读 · 0 评论 -
连续子数组的最大和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。public class Solution { public int FindGreatestSumOfSubArray(int[] arr) {...原创 2019-03-30 17:57:58 · 737 阅读 · 0 评论 -
最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。public class Solution { public static ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { ArrayList<Integer> ...原创 2019-03-30 17:58:34 · 245 阅读 · 0 评论 -
连续正数序列和等于给定值
【题目】小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!public static ArrayList...原创 2019-03-06 17:20:58 · 371 阅读 · 0 评论 -
二叉树的深度
【题目】输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。public class TreeDepth { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(in...原创 2019-03-06 16:28:08 · 78 阅读 · 0 评论 -
第一个只出现一次的字符
【题目】在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).public int FirstNotRepeatingChar(String str) { if(str == null || str.length() == 0){ return -1...原创 2019-03-06 14:46:59 · 81 阅读 · 0 评论 -
打印能拼接出的所有数字中最小的一个
【题目】输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。public class PrintMinNumber { public String PrintMinNumber(int[] numbers) { String str = ""; List<I...原创 2019-03-06 14:47:58 · 326 阅读 · 0 评论 -
表示数值的字符串
【题目】请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。public boolean isNumeric(char[] str) { boolean sign = false; boo原创 2019-03-08 18:06:53 · 82 阅读 · 0 评论 -
字符流中第一个不重复的字符
【题目】请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。public class FirstAppearing { // Insert one char from stringstream int[] arr = new int[...原创 2019-03-08 18:07:20 · 91 阅读 · 0 评论 -
删除排序链表中重复的结点
【题目】在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5public class DeleteDuplication { public class ListNode { int val; ListNode next ...原创 2019-03-08 18:07:39 · 553 阅读 · 0 评论 -
对称的二叉树
【题目】请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。public class IsSymmetrical { public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int...原创 2019-03-08 18:07:58 · 76 阅读 · 0 评论 -
按层和之字形顺序打印二叉树
【题目】请实现一个函数按照层和之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。public class PrintByLevel { public static class Node { public int value; public Node left; public Node right; p...原创 2019-03-08 18:08:16 · 78 阅读 · 0 评论 -
数据流中的中位数
【题目】如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。public class GetMedian { LinkedList<Integer> li...原创 2019-03-08 23:25:52 · 139 阅读 · 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,...原创 2019-03-08 23:26:14 · 90 阅读 · 0 评论 -
矩阵中的路径
【题目】请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串...原创 2019-03-08 23:26:32 · 103 阅读 · 0 评论 -
机器人的运动范围
【题目】地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? public int movingCount...原创 2019-03-08 23:26:52 · 128 阅读 · 0 评论 -
丑数
【题目】把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。public int GetUglyNumber_Solution(int index) { if (index < 7) return index; int[] res = new in...原创 2019-03-08 23:27:14 · 83 阅读 · 0 评论 -
统计一个数字在排序数组中出现的次数。
【题目】统计一个数字在排序数组中出现的次数。public class GetNumberOfK { public int GetNumberOfK(int[] array, int k) { return binarySearch(array, k + 0.5) - binarySearch(array, k - 0.5); } public int binarySearch(int...原创 2019-03-06 16:07:27 · 574 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。public class VerifySquenceOfBST { public boolean VerifySquenceOfBST(int[] sequence) { if (sequence.length == 0 || sequence == n...原创 2019-03-30 17:58:57 · 238 阅读 · 0 评论