![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
张小璇flying
在努力学习JAVA,希望一年以后自己能独立做个项目,找到实习工作,迎难而上,加油!
展开
-
剑指offer-二刷
09.用两个栈实现队列力扣错误点:1.栈定义Stack<Integer>A = new LinkedList<>() 是错误的Stack<Integer> a = new Stack<>();或者 LinkedList<Integer> l = new LinkedList<>();思路:添加时直接在A中加,B相当于A的倒序。删除时要考虑三种情况,当B中有元素,直接删;AB都没元素时,要返回-1;剩下的只有A..原创 2022-03-15 20:59:10 · 246 阅读 · 0 评论 -
剑指offer-正则表达式动态规划
1.请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。题目链接:力扣class Solution { public boolean isMatch(String s, String p) { //dp[i][j]代表添加s的第i-1个原创 2022-03-11 20:43:33 · 296 阅读 · 0 评论 -
剑指offer-数据类型的定义出错
1.数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。题目链接:力扣class Solution { public int findNthDigit(int n) { //找规律题:不断的缩小范围 //根据n先找到该n处于几位数,之后确定哪个数,再确定n位于哪位值 long start原创 2022-03-11 18:36:51 · 249 阅读 · 0 评论 -
剑指offer-堆-利用堆添加元素时的自动排序
1.如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。例如,[2,3,4]的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - 返回目前所有元素的中位数。题目链接:力扣.原创 2022-03-09 17:08:32 · 74 阅读 · 0 评论 -
剑指offer-数位dp求1-n中1出现的次数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。本题需注意:cur,digit,low,high 的定义,及其赋值时的顺序。题目链接:力扣class Solution { public int countDigitOne(int n) { //本题固定位(十进制),利用固定位循环 //当固定位为0时,计算公式是:高位值*固定位的进制数;原创 2022-03-09 15:30:34 · 136 阅读 · 0 评论 -
剑指offer-有限状态自动机-先定义状态、再画状态转移图、最后编写代码
解题最重要难点的是根据题意去,发掘出各个状态的定义。1.请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。题目链接:力扣数值(按顺序)可以分成以下几个部分:若干空格 一个小数或者整数 (可选)一个'e'或'E',后面跟着一个整数 若干空格小数(按顺序)可以分成以下几个部分:(可选)一个符号字符('+' 或 '-') 下述格式之一: 至少一位数字,后面跟着一个点 '.' 至少一位数字,后面跟着一个点 '.' ,后面再跟着至少一位数字 一个点 ...原创 2022-03-08 17:59:19 · 1324 阅读 · 0 评论 -
剑指offer-二进制,加运算
1.编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量).)。题目链接:力扣public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int res =0; while(n !=0){ res ++; .原创 2022-03-07 10:54:33 · 7998 阅读 · 0 评论 -
剑指offer-矩阵问题
1.输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]题目链接:力扣题目关键:确定跳出循环时的是否有等号;class Solution { public int[] spiralOrder(int[][] matrix) { //没有处理特殊情况 if(matrix.length ==0) return new .原创 2022-03-03 23:00:35 · 103 阅读 · 0 评论 -
剑指offer-回溯-深度优先搜索+剪枝
此类1.String实例化的不同方式方式一:通过字面量定义的方式,数据储存在方法区的字符常量池中方式二:通过new + 构造器的方式,此时遍历是指的堆空间的地址值常量与常量的拼接结果在常量池。且常量池中不会存在相同内容的常量。只要其中一个是变量,结果就在堆中。如果拼接的结果调用intern()方法,返回值就在常量池中2.StringBuffer\StingBuilder是可变长的字符串...原创 2022-03-03 22:18:21 · 359 阅读 · 0 评论 -
剑指offer-动态规划
动态规划(Dynamic Programming),简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每个状态是由上一个状态推导出来的,这一点区别于贪心,贪心没有状态推导,而是从局部直接选最优的。动态规划5步:...原创 2022-02-28 22:22:23 · 269 阅读 · 0 评论 -
剑指offer -简单算法
1.考察边界的确定写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0,F(1)= 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。题目链接:力扣class Solution { ...原创 2022-02-24 17:30:02 · 132 阅读 · 0 评论 -
剑指offer-字符串
1.请实现一个函数,把字符串 s 中的每个空格替换成"%20"。题目链接:力扣考验可变字符串类,StringBuilder的使用class Solution { public String replaceSpace(String s) { StringBuilder res = new StringBuilder(); for(char chars : s.toCharArray()){ if(chars == ' ') res.原创 2022-02-24 17:28:13 · 111 阅读 · 0 评论 -
剑指offer-数组\矩阵
1.找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。重点是:使用set集合,set中不能储存重复的值题目链接:力扣class Solution { public int findRepeatNumber(int[] nums) { //使用set集合,set中不能储存重复的值 Set<In原创 2022-02-24 17:14:21 · 462 阅读 · 0 评论 -
剑指offer-搜索二叉树
搜索二叉树定义:左子树中所有节点的值 <根节点的值;右子树中所有节点的值 > 根节点的值;其左、右子树也分别为二叉搜索树。1.输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。题目链接:力扣重点:左右子树的划分;class Solution { public boolean verifyPostorder(int[] postorder) { re..原创 2022-02-22 16:11:54 · 131 阅读 · 0 评论 -
递归三要素
1.确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。2.确定终止条件:写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。3.确定单层递归的逻辑:确定每一层递归需要处理的信息。在这里就会重发调用自己来实现递归的过程。...原创 2022-02-21 11:58:58 · 337 阅读 · 0 评论 -
剑指offer-二叉树递归
1.重建二叉树:根据前序和中序的遍历结果,重构建二叉树并返回其根节点题目链接:力扣方法:递归对于任意树,前序遍历的形式,根节点是前序遍历的第一个节点【根节点,【左子树前序遍历结果】,【右子树的前序遍历结果】】中序遍历的形式【【左子树的中序遍历结果】,根节点,【右子树的中序遍历结果】】只要我们在中序遍历中定位到根节点,那么我们就可以分别知道左子树和右子树中的节点数目。由于同一颗子树的前序遍历和中序遍历的长度显然是相同的,因此我们就可以对应到前序遍历的结果中,对上述形式中的所有左右括原创 2022-02-17 20:24:41 · 399 阅读 · 0 评论 -
剑指offer-链表
一、链表1.描述输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。如输入{1,2,3}的链表如下图:返回一个数组为[3,2,1]0 <= 链表长度 <= 10000/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = va原创 2022-02-16 20:31:37 · 261 阅读 · 0 评论