剑指offer
LayfolkA
这个作者很懒,什么都没留下…
展开
-
算法刷题【14】剑指 Offer 06. 从尾到头打印链表
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 示例 1: 输入:head = [1,3,2] 输出:[2,3,1] 来源与leetcode。 其实这道题就是反转链表改进版,要将反转之后的链表用数组返回值。我觉得主要考察的是如何讲链表转换成数组。 这里用的一个方式就是,在迭代的时候,统计结点的个数,之后在根据结点的个数来开辟同等大小的数组空间。 然后就是注意,反转列表之后的头结点是pre。 class Solution { public int[] reversePrint(L原创 2021-05-15 23:48:04 · 59 阅读 · 0 评论 -
算法刷题【13】二查搜索树的第k大的结点
给定一棵二叉搜索树,请找出其中第k大的节点。 示例 1: 输入: root = [3,1,4,null,2], k = 1 3 / 1 4 2 输出: 4 示例 2: 输入: root = [5,3,6,2,4,null,null,1], k = 3 5 / 3 6 / 2 4 / 1 输出: 4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-di-kda-jie-dian-lcof 我原创 2021-04-15 18:52:25 · 101 阅读 · 0 评论 -
算法刷题【10】最小的k个数
输入整数数组 arr ,找出其中最小的 k 个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。 示例 1: 输入:arr = [3,2,1], k = 2 输出:[1,2] 或者 [2,1] 示例 2: 输入:arr = [0,1,2,1], k = 1 输出:[0] 方法一:快排后返回数组 1.1直接使用Arrays.sort()方法对数组进行排序,再用Arrays.copyOf()方法返回数组arr中最小的k个值。 class Solution { pu原创 2021-03-23 22:18:50 · 313 阅读 · 0 评论 -
算法刷题【9】栈的压入,弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 思路:在将所给序列压入栈后,马上判断这个元素是否为弹出序列的对应元素,如果是就弹出,如果 不是,就继续压入下一个元素。直到压入所有元素后,如果栈为空,则说明该序列是该压栈序列的弹出序列。 class Solution {原创 2021-03-21 22:05:34 · 130 阅读 · 0 评论 -
算法刷题【8】使用两个栈实现队列
题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 思路:创建一个入栈,一个出栈,一个元素先入 “入栈”,弹出后再压入“出栈”就可以达到先进先出的效果,等同队列。 需要注意的点是,在删除头部元素方法中,一定要注意先判断的先后顺序,1.先判断out栈是否存在元素,如果存在就直接弹出该元素,即为删除队尾元素 2.一定要先判断out栈是否原创 2021-03-21 20:50:21 · 68 阅读 · 0 评论 -
算法刷题【7】第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。 示例: s = “abaccdeff” 返回 “b” s = “” 返回 " " 第一个思路,用HashSet,但是没成功,这里记录下,望大佬指出错误 public char firstUniqChar(String s){ List<Character> list=new ArrayList<Character>();//创建一个字符型的哈希集合 for(int i=0;原创 2021-03-19 00:26:22 · 193 阅读 · 2 评论 -
算法刷题【6】替换空格
请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = “We are happy.” 输出:“We%20are%20happy.” class Solution { public String replaceSpace(String s) { int length=s.length; char array[]=new char[3*length];//开辟一个为所给字符串长度三倍的字符型数组 int size=0;//记录新字符串的长度原创 2021-03-18 22:13:02 · 95 阅读 · 0 评论