
剑指offer
剑指offer 的算法题解
I_LOVE_SMALL_CAT
这个作者很懒,什么都没留下…
展开
-
[Java] 58.2 左旋转字符串
描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!示例输入:"abcXYZdef",3返回值:"XYZdefabc"解题public class Solution { public String LeftRotateString(String s原创 2021-06-11 13:29:38 · 1200 阅读 · 1 评论 -
[Java] 58.1 翻转单词顺序列
描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“nowcoder. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a nowcoder.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?示例输入:"nowcoder. a am I"返回值:"I am a nowcoder."解题public class Sol原创 2021-06-11 12:00:08 · 1154 阅读 · 0 评论 -
[Java] 57.2 和为 S 的连续正数序列
描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!返回值输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序示例输入:9返回值:[[2,3,4],[4,5]]解题原创 2021-06-08 21:41:20 · 121 阅读 · 0 评论 -
[Java] 57.1 和为 S 的两个数字
描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。返回值对应每个测试案例,输出两个数,小的先输出。示例输入:[1,2,4,7,11,15],15返回值:[4,11]解题import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,i原创 2021-06-08 21:39:48 · 156 阅读 · 0 评论 -
[Java] 59. 滑动窗口的最大值
描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,原创 2021-06-08 21:38:21 · 233 阅读 · 0 评论 -
[Java] 41.2 字符流中第一个不重复的字符
描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。后台会用以下方式调用Insert 和 FirstAppearingOnce 函数string caseout = “”;1.读入测试用例字符串casein2.如果对应语言有Insert()函数的话,执行Insert() 函数3.循环遍历字符串里的每一个字符 ch { Insert原创 2021-06-08 21:30:14 · 180 阅读 · 0 评论 -
[Java] 41.1 数据流中的中位数
描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题import java.util.PriorityQueue;public class Solution { PriorityQueue<Integer> left = new Pr原创 2021-06-08 21:25:13 · 140 阅读 · 0 评论 -
[Java] 40. 最小的 K 个数
描述给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组示例输入:[4,5,1,6,2,7,3,8],4 返回值:[1,2,3,4]解题import java.util.ArrayList;import java.util.Collections;public class Solution { public ArrayList<Integer> Ge原创 2021-06-07 18:04:03 · 137 阅读 · 0 评论 -
[Java] 31. 栈的压入、弹出序列
描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)示例输入:[1,2,3,4,5],[4,3,5,1,2]返回值:false解题import java.util.ArrayList;import java.util.Stack;publ原创 2021-06-07 18:03:10 · 122 阅读 · 0 评论 -
[Java] 30. 包含 min 函数的栈
描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题import java.util.Stack;public class Solution { Stack<Integer> dataStack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); public void push(int no原创 2021-06-07 18:01:56 · 137 阅读 · 0 评论 -
[Java] 9. 用两个栈实现队列
描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题import java.util.Stack;public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) {原创 2021-06-07 18:01:10 · 122 阅读 · 0 评论 -
[Java] 4. 二维数组中的查找
描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。示例1输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]返原创 2021-06-07 18:00:05 · 179 阅读 · 0 评论 -
[Java] 50. 第一个只出现一次的字符位置
描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)示例输入:"google"返回值:4解题import java.util.Collection;import java.util.LinkedHashMap;public class Solution { public int FirstNotRepeatingChar(String str) {原创 2021-06-07 17:58:13 · 182 阅读 · 0 评论 -
[Java] 29. 顺时针打印矩阵
描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.示例输入:[[1,2],[3,4]]返回值:[1,2,4,3]解题import java.util.ArrayList;public class Solution { public ArrayList<Int原创 2021-06-07 17:55:20 · 108 阅读 · 0 评论 -
[Java] 5. 替换空格
描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。示例输入:"We Are Happy"返回值:"We%20Are%20Happy"解题import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param原创 2021-06-07 17:53:04 · 117 阅读 · 0 评论 -
[Java] 3.数组中重复的数字
描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任一一个重复的数字。 例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。存在不合法的输入的话输出-1示例1:输入:[2,3,1,0,2,5,3]返回值:2说明:2或3都是对的 解题import java.util.*;public class Solution { /** * 代码原创 2021-06-07 17:49:26 · 187 阅读 · 0 评论