剑指offer题java版
Fear is not real
Stay hungry ,stay foolish.
展开
-
剑指Offer:字符串的排列
参考链接1参考链接2Java代码如下:import java.util.ArrayList;import java.util.Collections;public class Solution { static int count = 0; public ArrayList<String> Permutation(String str) { ...原创 2019-11-24 16:34:49 · 163 阅读 · 0 评论 -
剑指Offer:左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路1:java内置的函数(考查的知识点应该不是它)public String subs...原创 2019-10-31 21:26:37 · 171 阅读 · 0 评论 -
剑指offer:判断数组是不是二叉搜索书的后序遍历结果
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:二叉搜索树的后序遍历特点: 后序遍历 的序列中,最后一个数字是树的根节点 ,数组中前面的数字可以分为两部分:第一部分是左子树节点 的值,都比根节点的值小;第二部分 是右子树 节点的值,都比 根 节点 的值大,后面用递归分...原创 2019-10-12 17:16:07 · 153 阅读 · 0 评论 -
剑指Offer:链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路1运用哈希表,循环链表的入口会首次插入两次,则遇到重复用Hashmap即可搞定。/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.va...原创 2019-10-12 15:22:13 · 130 阅读 · 0 评论 -
将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串
题目描述:输入一串字符,请编写一个字符串压缩程序,将字符串中连续出现的重复字母进行压缩,并输出压缩后的字符串。例如:aac 压缩为 1acxxxxyyyyyyzbbb 压缩为 3x5yz2b输入描述:任意长度字符串 如 xxxxyyyyyyzbbb输出描述:压缩后的字符串,即 3x5yz2b分析思路: 运用 StringBuffer 的 a...原创 2019-05-26 14:00:29 · 7417 阅读 · 0 评论 -
剑指offer:整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。思路:关于字符串String有一个很简单的题目,就是求指定字符串中...原创 2019-04-26 20:06:30 · 150 阅读 · 0 评论 -
剑指offer:树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:先找到 B的根节点在A中的位置,找到之后,递归比较该位置的左右子节点 与 B 的左右子节点是否相等。/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right...原创 2019-04-17 09:09:48 · 90 阅读 · 0 评论 -
剑指Offer:二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:* 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增。因此可以选择左下角元素或者是右上角元素开始。(若从左上角元素[或者是右下角元素]开始比较,target比当前元素大时,...原创 2019-04-02 17:33:40 · 133 阅读 · 0 评论 -
数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。算法思想:别人的思路:/*考虑过程:首先我们考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目为什么要强调有一个数字出现一次,其他的出现两次?我们想到了异或运算的性质:任何一个数...原创 2019-03-18 18:37:42 · 96 阅读 · 0 评论 -
输入一个字符串,过滤掉非首次出现的重复字符
题目描述:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。输入:abccdeeefff输出:abcdef思路: 利用哈希表的键(key)的唯一性即可。import java.util.Scanner;import java.util.LinkedHashMap;...原创 2019-05-26 14:48:14 · 890 阅读 · 0 评论 -
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
题目链接题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。参考别人的思路在这里自定义一个比较大小的函数,比较两个字符串s1, s2大小的时候,先将它们拼接起来,比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面,所以按这个规则...原创 2019-09-27 12:36:22 · 3992 阅读 · 1 评论 -
求连续子数组和的最大值
题目描述:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1,-2,3,10,-4,7,2,-5,那么该数组中连续的最大的子数组为3,10,-4,7,2,则输出为该子数组和最大值18。输入的数组为 -2,-8,-7,-1,-10,那么该数组中...原创 2019-06-09 17:48:35 · 945 阅读 · 0 评论 -
剑指Offer:最小的K个数
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路1:先排序,然后选择前K个数输出。(注意:这里作弊地用了Java自带的排序方法Arrays.sort() ),如果这样做的话,这个题目就没有啥意义了,啥知识点都没复习到.....import java.util.Arrays;import java....原创 2019-10-06 09:10:47 · 91 阅读 · 0 评论 -
剑指Offer:数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路1第一想法是用哈希表,如果包含键key,其值 value 保存出现的次数 ;如果不包含,首次出现设置其value为1,即put(key, 1)import ja...原创 2019-10-06 09:37:19 · 111 阅读 · 0 评论 -
剑指Offer:平衡二叉树的判断
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。***************************************************************************************************************************************************知识点复习(求二叉树的深度)求二叉树...原创 2019-10-06 15:36:12 · 159 阅读 · 0 评论 -
剑指Offer:删除链表中重复的元素(重复元素不保留),leetcode:删除链表中重复的元素(重复元素保留一个)
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表1->2->3->3->4->4->5 处理后为 1->2->5链表1->1->1->1->2->4->5,处理后为2->4->5思路1:1. 首先添加一个头节点,以方...原创 2019-10-07 09:35:33 · 490 阅读 · 0 评论 -
剑指offer:顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.思路: 用左上和右下的坐标定位出一次要旋转打印的数据; 一次旋转打印结束后,往对角分别前进和后...原创 2019-03-21 15:34:48 · 219 阅读 · 0 评论 -
输入两个链表,找出它们的第一个公共结点。
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/import java.lang.Math;public class Solution { public ListNode FindFir...原创 2019-03-23 17:44:33 · 295 阅读 · 0 评论 -
剑指offer:输入一个链表,输出该链表中倒数第k个结点。
代码思路如下:两个指针,先让第一个指针和第二个指针都指向头结点;然后再让第一个指正走(k-1)步,到达第k个节点。然后两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了。/*public class ListNode { int val; ListNode next = null; ListNode(int val) {...原创 2019-02-24 19:14:12 · 383 阅读 · 0 评论 -
剑指offer:输入一个链表,反转链表后,输出新链表的表头。
代码思路:使用头插法插入:当前节点是head,pre为当前节点的前一节点,next为当前节点的下一节点需要pre和next的目的是让当前节点从pre->head->next1->next2变成pre<-head next1->next2即pre让节点可以反转所指方向,但反转之后如果不用next节点保存next1节点的话,此单链表就此断开了所以需要用到...原创 2019-02-24 19:41:46 · 168 阅读 · 0 评论 -
剑指offer:“student. a am I”-----》“I am a student.”翻转单词顺序
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?思路: 先对整个st...原创 2019-02-28 22:25:47 · 400 阅读 · 0 评论 -
剑指offer:操作给定的二叉树,将其变换为源二叉树的镜像。
输入描述二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5思路:先前序遍历这棵树的每个结点,如果遍历到的结点有子结点...原创 2019-02-28 23:01:06 · 588 阅读 · 0 评论 -
剑指offer:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
参考别人思路:背景介绍java中 的逻辑运算有 :布尔逻辑或 | ;布尔逻辑与 & 。 如 a & b,当a 和 b 的值均为真时,才返回true。短路逻辑 或 || ;短路逻辑与 && 。短路逻辑与 && :表示当第一个表达式的值为假时,它不再判断第二个表达式的值,而是直接返回false。短路逻辑或 || ...原创 2019-03-01 10:01:33 · 394 阅读 · 0 评论 -
剑指offer:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。参考别人思路:位运算!两个数相异或:相当于没一位相加(不考虑进位); 两个数相与并左移1位:相当于求得进位; 将上述两个步骤相加。例子:牛客网彭延的例子13+11 = ?;13 的二进制 1 1 0 1 -----a 13...原创 2019-03-03 10:26:58 · 581 阅读 · 0 评论 -
剑指Offer:数值的整数次方
题目描述:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。首先是自己的常规解法:乘以exponent次,若exponent值小于0,则取倒数即可。public class Solution { public double Power(double base, int exponent) { if (...原创 2019-02-26 22:59:52 · 162 阅读 · 0 评论 -
剑指offer:二叉树的深度。
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。方法一:递归分析:假设已知一棵二叉树的左子树和右子树的深度,怎么算出整棵树的深度呢? 这是问题的关键。如果有一棵二叉树,左子树的深度为left,右子树的深度为right,则整棵树的深度就是max(left,right)+ 1,即左右子树中的...原创 2019-03-04 16:51:22 · 483 阅读 · 0 评论 -
剑指offer:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)参考Alias思路【参考思路】借用一个辅助栈,遍历压栈顺序,先将第一个...原创 2019-03-03 14:17:34 · 4146 阅读 · 0 评论 -
剑指offer:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))
思路:新建一个辅助栈 min 来存放最小值。入栈时,与辅助栈顶比较大小,如果小就入辅助栈min ;如果大就入栈data。出栈时,注意辅助栈min 和 栈data 都要出栈。方法1: data栈 依次入栈元素 5, 4, 3, 8, 10, 11, 12, 1; min栈 依次入栈元素5, 4, 3,no, no,n...原创 2019-03-03 15:17:58 · 2360 阅读 · 1 评论 -
剑指offer:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路1:正数的原码=反码=补码。计算机中,负数用补码表示。如负数 -7 符号位 数值位 1 0000111 即-7的原码为(1000 0111)反码1 1111000 (负数的反码与原码符号位相同,数值为取反)补码1 1111001 (负数的补码是在反码的基础上加1)如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数...原创 2019-02-27 10:25:17 · 1115 阅读 · 2 评论 -
剑指offer:调整数组顺序,使得奇数位于偶数前面
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路1:创建一个新数组temp,大小和原数组array一样。遍历原数组array,元素是奇数则放在temp数组的前面,偶数放在后面。空间复杂度为O(n),时间复杂度为O(n)。public class ...原创 2019-03-08 17:08:16 · 153 阅读 · 0 评论 -
剑指offer:合并两个排序的链表、合并两个有序的数组
题目描述1输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。用例:{1,3,5},{2,4,6}对应输出应该为:{1,2,3,4,5,6}思路:尾插法建立一个新的链表。头插法建立链表步骤:假设head 为链表的开始结点,插入新的结点 s ,则 head.next = s/*public class ListNod...原创 2019-03-08 21:56:13 · 141 阅读 · 0 评论 -
剑指offer:重构二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路分析:先序遍历的第一个元素就是1即为树的根节点。在中序遍历数组中找到1,则1将中序遍历数组分为了两个数组。左边的数组构成了左子树,右边的数组...原创 2019-03-06 19:16:05 · 182 阅读 · 0 评论 -
剑指offer:旋转数组中最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路一:顺序查找顺序查找时,已知最小元素出现在数组第一次减小的位置。算法复杂度O(n)impo...原创 2019-03-06 21:41:42 · 173 阅读 · 0 评论 -
剑指Offer:第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)思路:利用hashmap的键值对。如str = "google",则哈希表为键key为: g ,值value为:1 键key为: o ,值value为:1 键key为: o ,值value为:2 ...原创 2019-02-24 14:32:52 · 175 阅读 · 0 评论