
剑指offer
wake_alone
这个作者很懒,什么都没留下…
展开
-
JZ32 把数组排成最小的数
描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。示例1 输入: [3,32,321] 返回值: “321323”思路1:全排列全排列然后排序取最小import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;import java.util.LinkedHas.原创 2021-07-31 21:24:25 · 125 阅读 · 0 评论 -
JZ31 整数中1出现的次数(从1到n整数中1出现的次数)
描述 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次示例1 输入: 13 返回值: 6思路1:暴力循环就不写了思路2:按位遍历https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof/submissions/public class Solution { public static void main.原创 2021-07-29 23:41:35 · 143 阅读 · 0 评论 -
JZ62 二叉搜索树的第k个结点
描述给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。示例1输入:{5,3,7,2,4,6,8},3返回值:4说明:按结点数值大小顺序第三小结点的值为4思路1:递归/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; .原创 2021-07-19 01:34:31 · 98 阅读 · 0 评论 -
JZ30 连续子数组的最大和
描述输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 O(n).示例1输入:[1,-2,3,10,-4,7,2,-5]复制返回值:18复制说明:输入的数组为{1,-2,3,10,—4,7,2,一5},和最大的子数组为{3,10,一4,7,2},因此输出为该子数组的和 18。思路1: dp动态规划dp[i] = max{dp[i-1] + array[i], array[i]}public class S.原创 2021-07-18 21:33:07 · 92 阅读 · 0 评论 -
JZ38 二叉树的深度
描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。示例1输入:{1,2,3,4,5,#,6,#,#,7}复制返回值:4思路1:分治/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this..原创 2021-07-17 14:31:00 · 99 阅读 · 0 评论 -
JZ28 数组中出现次数超过一半的数字
描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000示例1 输入: [1,2,3,2,2,2,5,4,2] 复制 返回值: 2 复制 示例2 输入: [3,3,3,3,2,2,2] 复制返回值: 3 复制 示例3 输入: [1] 复制 返回值: 1 复制思路.原创 2021-07-04 20:09:27 · 214 阅读 · 0 评论 -
JZ27 字符串的排列 ---JAVA实现
描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路按照剑指offer上的递归方法import java.util.ArrayList;import java.util.HashSet;import java.util.LinkedHashSet;public class原创 2021-07-04 18:28:07 · 118 阅读 · 0 评论 -
剑指offer23--链表中环的入口节点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路:计算环的节点数两个指针,p1,p2p1一次走一步,p2一次走两步。第一次相遇之后开始计数,第二次再相遇时count的值就是环有多少个节点。判断入口节点两个指针,p1,p2p1先走count步,然后两个再同时走,相遇的点就是入口节点。 /*struct ListNode ...原创 2018-08-13 14:19:07 · 140 阅读 · 0 评论 -
剑指offer25--合并两个排序的链表——java/C++实现
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:判断空 头节点需要判断, 然后让头节点一个一个吞噬链表。比较麻烦/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }...原创 2018-08-22 14:13:12 · 145 阅读 · 0 评论 -
剑指offer26--树的子结构——java/C++实现
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:从上往下找相同的节点,一旦找到一个,就开始判断子树是否相等。 如果不相等,那么就往左往右去找,可以用||连起来/*struct TreeNode { int val; struct TreeNode *left;https://www.nowcoder.com...原创 2018-08-22 22:03:44 · 195 阅读 · 0 评论 -
剑指offer27--二叉树的镜像——java/C++实现
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...原创 2018-08-22 22:18:36 · 132 阅读 · 0 评论 -
剑指offer35--复杂链表的复制——java/C++实现
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:哈希表法先复制一个链表,同时用哈希表存储所有指针 然后再遍历链表,利用哈希表复制所有指针/*struct RandomListNode { ...原创 2018-08-31 13:06:10 · 161 阅读 · 0 评论 -
剑指offer29--顺时针打印矩阵——java/C++实现
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下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.思路:打印从0,0-------1,1-------------2.2 从0,0开始每次遇到起点就打印...原创 2018-08-24 11:22:43 · 148 阅读 · 0 评论 -
剑指offer28--对称的二叉树——java/C++实现
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:遍历的同时进行比较。注意:NULL节点也需要比较 前序比较方便。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;...原创 2018-08-24 12:07:38 · 155 阅读 · 0 评论 -
剑指offer30--包含min函数的栈——java/C++实现
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:辅助栈sta2 辅助栈必须要保持次小的元素 保持两个栈数量相等(我的做法)sta2可以放入最小的元素 sta2,只看现在放入的是不是小于等于最小值,是的话就放入sta2 class Solution {public: stack<int...原创 2018-08-24 16:27:11 · 166 阅读 · 0 评论 -
剑指offer31--栈的压入、弹出序列——java/C++实现
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:(更好的)模拟这个的过程一个一个往栈里面放,然后每次放一个都得...原创 2018-08-24 19:33:25 · 185 阅读 · 0 评论 -
剑指offer32(1,2,3)--从上往下打印二叉树,分行从上往下打印二叉树,按之字形顺序打印二叉树——java/C++实现
从上往下打印二叉树题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:层序遍历,用到队列/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { ...原创 2018-08-24 20:28:15 · 217 阅读 · 0 评论 -
剑指offer33--二叉搜索树的后序遍历序列——java/C++实现
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:递归注意点:while可以保证i加一次 for循环保证精确break 但是在这个题目,应该要保证加一次for(int i=left;i<=right;i++)//这里应该是<=right,见上文注意点 eg:...原创 2018-08-25 16:27:50 · 186 阅读 · 0 评论 -
剑指offer34--二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:递归加回溯技巧:今天才知道可以把定义的放到上面。。。。vector这样就不用引用了。。。/*struct TreeNode { int val; ...原创 2018-08-25 19:41:12 · 172 阅读 · 0 评论 -
剑指offer37--序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树 思路:前序遍历加上“#”作为结尾坑:string s;char* res=s.c_str();//报错~~~/*必须这样*/char* res=new char[s.size()+1];strncpy(res,s.c_str(),s.size()); 牛客不能用itoa,得自己写/*struct...原创 2018-09-11 23:22:47 · 191 阅读 · 0 评论 -
剑指offer36--二叉搜索树与双向链表 --- java/c++
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:不能创建新节点肯定是中序遍历,麻烦的在于需要保持一个遍历过程中链表的尾巴,这样才能递归成链表/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right;...原创 2018-09-09 16:31:58 · 182 阅读 · 0 评论 -
剑指offer7--重建二叉树——java/C++实现
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。/** * Definition for binary tree * struct TreeNode { * int val; * ...原创 2018-07-24 23:43:15 · 134 阅读 · 0 评论 -
剑指offer20--表示数值的字符串——java/C++实现
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。代码实现:抄袭剑指offer,主要在于原创 2018-08-08 16:12:26 · 253 阅读 · 0 评论 -
剑指offer19--正则表达式匹配——java/C++实现
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配思路:空字符串---false 第二个字符串不是* 判断是否相等,相等就都...原创 2018-08-08 14:58:47 · 168 阅读 · 0 评论 -
剑指offer10(牛客)--变态跳台阶——java/C++实现
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:其实这个也很简单,我们可以发现输入number 输出re's 0 0 1 1 2 2(1+1) 3 4(1+2+1) 4 8(1+2+4+1) 5 16(1+2+4+8+1) 6...原创 2018-07-26 11:06:48 · 170 阅读 · 0 评论 -
剑指offer10--跳台阶——java/C++实现
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。递归写法:4msclass Solution {public: int jumpFloor(int number) { if(number==0) return 0; if(number==1) return 1...原创 2018-07-26 10:53:22 · 176 阅读 · 0 评论 -
剑指offer10--斐波那契数列——java/C++实现
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39依次算:class Solution {public: int Fibonacci(int n) { if(n<=0) return 0; if(n==1) return 1; int ...原创 2018-07-26 10:37:06 · 129 阅读 · 0 评论 -
剑指offer9--用两个栈实现队列/用队列实现栈——java/C++实现
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:没啥好说的。。。class Solution{public: void push(int node) { stack1.push(node); } int pop() { if(stack2.empty())...原创 2018-07-26 09:45:01 · 119 阅读 · 0 评论 -
剑指offer8--二叉树的下一个结点——java/C++实现
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:失败:刚开始想着先看根,再看叶子结点,再看中间。这样就没有结合题目,很麻烦了。正确:中序,有没有右子树,有的话,必须找右子树的最左边的节点。如果有,那么得分是左子节点(直接返回父节点)右子节点--------一直找父节点,如果父节点...原创 2018-07-25 11:12:36 · 113 阅读 · 0 评论 -
剑指offer6--从尾到头打印链表——java/C++实现
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。vector的利用:/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* }...原创 2018-07-24 21:53:12 · 242 阅读 · 0 评论 -
剑指offer5--替换空格——java/C++实现
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy思路1:从左往右循环,遇到空格,就要把后面的全部往后挪2个位置。时间O(n2)思路2:p1指针指向字符串尾巴,p2指针指向扩充完之后的遇到空格,就把p1指针前移,p2指针补充0,2,%三个,前移3次。这样...原创 2018-07-24 19:36:10 · 142 阅读 · 0 评论 -
剑指offer4--二维数组中的查找——java/C++实现
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:从右上角/左下角开始处理,如果大于就不在这个列,y--;如果小于就不在这个行,x++;如果等于返回true坑:x,y都能够等于0。边界条件要判断好。...原创 2018-07-24 16:43:26 · 134 阅读 · 0 评论 -
剑指offer3--数组中重复的数字
链接:https://www.nowcoder.com/questionTerminal/623a5ac0ea5b4e5f95552655361ae0a8来源:牛客网在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3}...原创 2018-07-24 15:56:06 · 167 阅读 · 0 评论 -
剑指offer10(牛客)--矩阵覆盖——java/C++实现
题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?思路:输入2*n的矩形,从最左边考虑,竖着覆盖一个,还剩F(n-1),横着覆盖一个,下面必须也覆盖横着的,还剩F(n-2).还是斐波那契数列class Solution {public: int rectCover(int ...原创 2018-07-26 11:14:41 · 212 阅读 · 0 评论 -
剑指offer17--打印从1到最大的n位数——java/C++实现
输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到999(最大的3位数)。思路:因为n没给,所以必须考虑到大数相乘除得用字符串来处理。个位(最低位在str[0])加加 change函数检测是否需要进位,返回值是为了在最高位需要进位的时候停止 pcout输出#include <iostream>#include &l...原创 2018-08-03 16:26:54 · 208 阅读 · 0 评论 -
剑指offer22--链表中倒数第k个结点——java/C++实现
输入一个链表,输出该链表中倒数第k个结点。思路:两个指针一个往前走k次,然后再判断,总长度只有k的时候,稍微麻烦一些。class Solution {public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL) ...原创 2018-08-03 14:13:26 · 117 阅读 · 0 评论 -
剑指offer21--调整数组顺序使奇数位于偶数前面——java/C++实现
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路1:建立一个新的数组class Solution {public: void reOrderArray(vector<int> &array) { ...原创 2018-08-03 13:21:27 · 148 阅读 · 0 评论 -
剑指offer18--删除链表的节点——java/C++实现
在O(1)时间内删除链表节点给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。思路:空节点 要删除的节点不是尾节点 链表只有一个节点,删除头结点 链表中有多个节点,删除尾节点删除链表中重复的结点题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3-&...原创 2018-08-07 23:38:56 · 220 阅读 · 0 评论 -
剑指offer16--数值的整数次方——java/C++实现
题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路:exponent大于,等于,小于0base为0,非0讨论这6种情况解题:class Solution {public: double Power(double base, int exponent) { do...原创 2018-08-03 09:58:28 · 169 阅读 · 0 评论 -
剑指offer15--二进制中1的个数——java/C++实现
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。leecode338. Bit位计数思路:这个题目只需要输入的这个数,所以思路是不一样的。用O(sizeof(输入))即O(n)方法其实最简单解法1:因为有补码,所以不能用n/=2的方法跳出循环,必须循环32次class Solution {public: int NumberOf...原创 2018-07-31 17:10:21 · 186 阅读 · 0 评论