![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
LayfolkA
这个作者很懒,什么都没留下…
展开
-
【23】二叉树的层序遍历
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2021-08-05 00:31:38 · 58 阅读 · 0 评论 -
【19】链表中的倒数第k个结点
剑指 Offer 22. 链表中倒数第k个节点输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.方法一:双指针,用两指针之间的距离记录找到倒数第k个结点。fast指针先走k步,然后.原创 2021-07-27 00:02:02 · 85 阅读 · 0 评论 -
【18】二进制数中的1的个数
编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示: * 请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。在 Java 中,编译器使用 二进制补码 记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。示例 1:输入:n..原创 2021-07-27 00:00:00 · 81 阅读 · 0 评论 -
算法刷题【17】缺失的第一个正数2
题目41.缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0] 输出:3 示例 2:输入:nums = [3,4,-1,1] 输出:2方法一:自创哈希法,三个循环三步走关键语句,标记: nums[num-1] = -Math.abs(nums[num-1]);理解的不是很透彻,之后再来补充。class Solution { p原创 2021-07-23 22:55:21 · 137 阅读 · 0 评论 -
算法刷题【16】LRU缓存
方法一:哈希+双链表LRU缓存就是在容量满了之后,又有新的元素需要存入时,这时会优先丢弃掉最近最久未使用的元素。使用双向链表维护一个容量,当元素被读取(或其他操作)时,就把这个元素放到链表头,更新它的使用时间。HashMap的作用确定读取的节点在双向链表中输入哪一个节点。class LRUCache {class Node {//结点类,存放key-value对象元素,有前域和后域 public int key, val; public Node next, prev;原创 2021-07-23 22:04:52 · 104 阅读 · 0 评论 -
算法刷题【15】无重复字符的最常子串
题目描述3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。请注意,你的答案必须是 子串 的原创 2021-05-27 11:17:17 · 91 阅读 · 0 评论 -
算法刷题【13】二查搜索树的第k大的结点
给定一棵二叉搜索树,请找出其中第k大的节点。示例 1:输入: root = [3,1,4,null,2], k = 13/ 1 42输出: 4示例 2:输入: root = [5,3,6,2,4,null,null,1], k = 35/ 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 评论 -
算法刷题【11】数组中的第K个最大元素
题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-element原创 2021-04-05 15:02:07 · 119 阅读 · 1 评论 -
算法刷题【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 · 316 阅读 · 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 · 135 阅读 · 0 评论 -
算法刷题【8】使用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )思路:创建一个入栈,一个出栈,一个元素先入 “入栈”,弹出后再压入“出栈”就可以达到先进先出的效果,等同队列。需要注意的点是,在删除头部元素方法中,一定要注意先判断的先后顺序,1.先判断out栈是否存在元素,如果存在就直接弹出该元素,即为删除队尾元素2.一定要先判断out栈是否原创 2021-03-21 20:50:21 · 74 阅读 · 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 · 223 阅读 · 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 · 97 阅读 · 0 评论 -
算法刷题【5】从二维数值中查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 ta原创 2021-03-18 21:25:20 · 78 阅读 · 0 评论 -
算法刷题【4】验证搜索二叉树
给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ 1 3输出: true示例 2:输入:5/ 1 4/ 3 6输出: false解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 ,但是其右子节点值为 4 。/**Definition for a binar原创 2021-03-17 22:22:24 · 92 阅读 · 0 评论 -
算法刷题【2】反向链表
题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL我的思路:因为对java链表不太熟悉,所以我直接查看了题解。方法一:迭代法:目前已知最优解,时间O(n),空间O(1)。先设置一个前置指针prev,指向前面一个结点(第一个prev指向null),创建一个next指针记录下当前结点curr的next结点,将当前结点curr的next指针指向prev结点,然后就让当前结原创 2021-03-14 23:20:15 · 247 阅读 · 0 评论 -
算法刷题【1】数组中的重复数字
题目在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。返回描述:如果数组中有重复的数字,函数返回true,否则返回false。如果数组中有重复的数字,把重复的数字放到参数duplication[0]中。(ps:duplication已经初始化,可以直接赋值使用。)我的第一次思路:两层fo原创 2021-03-13 15:21:00 · 150 阅读 · 1 评论