![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
Fiona Hitane
你有拒绝的权利,禁止一切形式的情感上贡
展开
-
java——多线程
一道题原创 2022-10-20 18:19:11 · 198 阅读 · 0 评论 -
leetcode二叉树 根据前中后序重构二叉树——105/889/
一、105. 从前序与中序遍历序列构造二叉树1.题目https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/给定一棵树的前序遍历 preorder 与中序遍历 inorder。请构造二叉树并返回其根节点。2.思路根据前序遍历的路径是根左右,中序遍历的思路是左根右,可以确定:1.当前区间内的前序遍历的数组第一位是根节点;2.在中序遍历中找到根节点,根节点左边区间是左子树原创 2021-12-31 15:19:34 · 3360 阅读 · 0 评论 -
leetcode 1-5
2.两数相加题目https://leetcode-cn.com/problems/add-two-numbers/给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。思路遍历,注意:1.保存上一位的进位2.最后需要判断遍历完之后,进位是否为1,为1则需要后接一位3.代码/** * Definition f原创 2021-12-30 16:53:32 · 85 阅读 · 0 评论 -
leetcode动态规划 dynamic programming ——300/509/62/121/70/279/221
一、509斐波那契数https://leetcode-cn.com/problems/fibonacci-number/submissions/解法可参考上一篇动态化搜索的博文二、62不同路径1.题目https://leetcode-cn.com/problems/unique-paths/一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少原创 2021-12-23 23:16:21 · 130 阅读 · 0 评论 -
leetcode记忆化搜索——509/322
一、509二、322 零钱兑换1.题目https://leetcode-cn.com/problems/coin-change/给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。2.思路3.代码...原创 2021-12-22 22:42:22 · 260 阅读 · 0 评论 -
leetcode 贪心(greedy)—— 1217/55
零、贪心算法1.思想https://blog.csdn.net/effective_coder/article/details/8736718贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。一、322 零钱兑换1.题目https://leetcode-cn.com/problems/coin-change/给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金原创 2021-12-22 16:30:48 · 2000 阅读 · 0 评论 -
leetcode广度优先搜索BFS/并查集—— 200/547/721
一、200二、547三、721原创 2021-12-21 15:52:00 · 104 阅读 · 0 评论 -
java实现一个wordcount
1.题目统计一段时间内的词频2.思路1.flatmap切分数据2.keyby按照key分组统计3.设置时间窗口,统计一段时间内的4.使用ProcessFunction 实现一个自定义的 TopN 函数,用于统计topN3.代码1.统计某一时间段内的词频https://www.cnblogs.com/ShadowFiend/p/11951948.html2.统计某一时间段内的TOPNhttps://blog.csdn.net/ddxygq/article/details/11499376原创 2021-12-20 18:08:56 · 380 阅读 · 0 评论 -
leetcode深度优先搜索DFS——938/78/200
一、938二叉搜索树的范围和1.题目https://leetcode-cn.com/problems/range-sum-of-bst/给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。2.思路1.深度优先搜索(可套用二叉树的前序遍历)2.可利用二叉搜索(查找)树的特性:左子树<根节点<右子树3.代码1.二叉树前序遍历/** * Definition for a binary tree node. * public class原创 2021-12-18 17:07:20 · 639 阅读 · 0 评论 -
实现一个多线程
一、两个线程交替打印public static class myThread extends Thread{ public void run(){ ]}原创 2021-12-17 19:38:29 · 71 阅读 · 0 评论 -
leetcode回溯——22/78/77/46
一、22括号生成1.题目https://leetcode-cn.com/problems/generate-parentheses/数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。2.思路回溯算法基本思想:从一条路往前走,能进则进,不能进则退回来,换一条路再试。3.代码class Solution { public List<String> generateParenthesis(int n) { //回溯算法原创 2021-12-06 23:27:06 · 2760 阅读 · 0 评论 -
leetcode分治——169/53
一、169 多数元素1.题目https://leetcode-cn.com/problems/majority-element/给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。2.思想1.哈希表解法2.分治3.代码1.哈希表class Solution { public int majorityElement(int[] nums) { //hash原创 2021-12-06 17:52:09 · 317 阅读 · 0 评论 -
leetcode递归——509/206/344/687
一、509斐波那契数1.题目https://leetcode-cn.com/problems/fibonacci-number/solution/nickji-hua-da-qia-xi-lie-dong-tai-gui-hu-7jzx/斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n原创 2021-12-04 10:56:23 · 2912 阅读 · 0 评论 -
leetcode 滑动窗口—— 209/1456
一、209长度最小的子数组1.题目https://leetcode-cn.com/problems/minimum-size-subarray-sum/给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。2.思路思路如下代码注意:内层循环要用while,用if判断的话,sum >= ta原创 2021-12-02 18:33:49 · 2436 阅读 · 0 评论 -
leetcode二分查找——704/35/162/74
一、704 二分查找1.题目https://leetcode-cn.com/problems/binary-search/给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。2.思路查找区间为首尾指针,根据中点与target的值的关系来确定判断区间3.代码class Solution { publi原创 2021-12-01 18:36:54 · 286 阅读 · 0 评论 -
leetcode双指针——141/344/881
一、141环形链表1.题目https://leetcode-cn.com/problems/linked-list-cycle/给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回原创 2021-12-01 17:54:21 · 77 阅读 · 0 评论 -
java基础——链表数等的定义
一、二叉树的定义1.代码//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-12-01 17:06:16 · 284 阅读 · 0 评论 -
深/广度优先BFS(DFS)
一、广度优先BFS(Breadth First Search)https://blog.csdn.net/g11d111/article/details/761698611.定义2.思想3.实现二、深度优先DFS()原创 2021-11-30 23:40:53 · 71 阅读 · 0 评论 -
leetcode 堆 ——215/692
一、215 数组中的第K个最大元素1.题目https://leetcode-cn.com/problems/kth-largest-element-in-an-array/给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。2.思路大根堆:根节点大于子节点,大根堆的根结点在整个堆中是最大的元素。小根堆:根节点小于子节点,小根堆的根节点在整个堆中是最小的的元素3.代码class Solutio原创 2021-11-30 19:25:59 · 595 阅读 · 0 评论 -
leetcode集合——705
一、705 设计哈希集合1.题目https://leetcode-cn.com/problems/design-hashset/不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现 MyHashSet 类:void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。2.思路3.代码...原创 2021-11-30 13:22:34 · 84 阅读 · 0 评论 -
leetcode 哈希表Hash table—— 217/389/496
一、217存在重复元素1.题目https://leetcode-cn.com/problems/contains-duplicate/给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。2.思路用哈希表,key存储数值,value存储出现的次数3.代码class Solution { public boolean containsDuplicate(int[] nums) {原创 2021-11-29 19:50:33 · 260 阅读 · 0 评论 -
leetcode 栈——20/496/232
一、20. 有效的括号1.题目https://leetcode-cn.com/problems/valid-parentheses/给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。2.思路3.代码...原创 2021-11-25 13:39:59 · 84 阅读 · 0 评论 -
leetcode队列——933/225/622/641
零、队列常用方法stack: push 和 popqueue: offer和 poll通用的,即二者都可以用的:add、remove一、933最近的请求次数1.题目https://leetcode-cn.com/problems/number-of-recent-calls/写一个 RecentCounter 类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t原创 2021-11-22 23:01:17 · 109 阅读 · 0 评论 -
leetcode链表——203/206
一、203 移除链表元素1.题目https://leetcode-cn.com/problems/remove-linked-list-elements/给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。2.原理初始化一个节点,该节点的下一个指向链表的头结点判断该节点的下一个阶段是否和val相同 相同就用指向next.next来删除节点,否则向下遍历返回初始化的节点,因为可能有原链表被全部删除的情况 [原创 2021-11-22 18:17:29 · 205 阅读 · 0 评论 -
leetcode数组—— 485/283/27
一、485最大连续 1 的个数1 .题目https://leetcode-cn.com/problems/max-consecutive-ones/给定一个二进制数组, 计算其中最大连续 1 的个数。2.思路定义一个计数器和当前最大值,不为0处与数组末尾进行比较,并更新当前最大值注:比较完之后要记得计数器归零3.代码class Solution { public int findMaxConsecutiveOnes(int[] nums) { //base case原创 2021-11-22 17:15:04 · 219 阅读 · 0 评论 -
leetcode二叉树前、中序、后序和锯齿形遍历(非递归)——144/94/145/102/103
一、前序遍历1.原理前序遍历的访问顺序:先根节点,再左子树,最后右子树;上图的访问结果为:GDAFEMHZ。注:前序遍历会沿着根节点的左节点找到底,没找到然后再沿着右节点的左节点找到底,然后自底向上返回右节点2.代码public void preOrderTraverse(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); TreeNode node = root;原创 2021-11-12 19:27:49 · 265 阅读 · 0 评论 -
多线程实现消费者和生产者模式
https://segmentfault.com/a/1190000024444906一、介绍1.什么是生产者和消费者模式生产者和消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此并不直接通信,而是通过阻塞队列进行通信,所以生产者生产完数据后不用等待消费者进行处理,而是直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列中获取数据,阻塞队列就相当于一个缓冲区,平衡生产者和消费者的处理能力。二、代码import java.util.ArrayList;import转载 2021-11-12 16:03:49 · 178 阅读 · 0 评论 -
leetcode 654——最大二叉树
一、题目https://leetcode-cn.com/problems/maximum-binary-tree/给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:二叉树的根是数组 nums 中的最大元素。左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。返回有给定数组 nums 构建的 最大二叉树 。来源:力扣(LeetCode)链接:https://leetcode-cn.c转载 2021-11-09 21:58:30 · 61 阅读 · 0 评论 -
leetcode 146 ——LRU缓存算法
https://leetcode-cn.com/problems/lru-cache/原创 2021-11-09 21:39:38 · 91 阅读 · 0 评论 -
leetcode33/ 81——搜索旋转排序数组
参考:https://www.cnblogs.com/gzshan/p/12570332.html一、旋转数组对应牛客43题1.题目汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出(保证 K 小于等于 S 的长度)。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc” 。是不是很简单?OK,搞定它!数据范围:输入的字原创 2021-11-06 18:06:30 · 2946 阅读 · 0 评论 -
大数据开发面试准备——java算法
java算法面经原创 2021-07-22 09:33:41 · 113 阅读 · 0 评论 -
leetcode200 ——岛屿数量
一、题目概述给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。二、思路三、代码...原创 2021-10-22 11:20:20 · 220 阅读 · 0 评论 -
二叉树——leetcode114二叉树展开为链表
一、题目给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。二、题解https://mp.weixin.qq.com/s/izZ5uiWzTagagJec6Y7RvQ三、代码// 定义:将以 root 为根的树拉平为链表void flatten(TreeNode root) { // base case转载 2021-10-14 13:19:58 · 82 阅读 · 0 评论 -
链表——leetcode25. K 个一组翻转链表
一、题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。二、思路1.reverse函数,实现以反转以head开头的k个元素的功能2.将k+1个元素作为head递归调用reverseKGroup函数3.将上述两个过程连起来三、代码实现ListNode reverseKGroup(ListNode head, int k) { if (head == nul原创 2021-09-26 11:18:42 · 103 阅读 · 0 评论 -
链表——leetcode 160. 相交链表
一、题目给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。二、思路让p1遍历完链表A之后开始遍历链表B,让p2遍历完链表B之后开始遍历链表A,这样相当于「逻辑上」两条链表接在了一起。如果这样进行拼接,就可以让p1和p2同时进入公共部分,也就是同时到达相交节点c1这样有两个好处:1.因为是单链表,所以某个节点相同之后,下个节点一定相同;2.两个节点没有交点,相当于两节点相同的点返回的是null三、代码List原创 2021-09-23 22:30:55 · 99 阅读 · 0 评论 -
链表——leetcode19 删除链表的倒数第 N 个结点
一、单链表的倒数第 k 个节点1.思路首先,我们先让一个指针p1指向链表的头节点head,走k步;然后再用一个指针p2指向链表头节点head,让p1和p2同时向前走,p1走到链表末尾的空指针时走了n - k步,p2也走了n - k步,也就恰好到达了链表的倒数第k个节点2.代码// 返回链表的倒数第 k 个节点ListNode findFromEnd(ListNode head, int k) { ListNode p1 = head; // p1 先走 k 步 for (原创 2021-09-23 21:40:15 · 82 阅读 · 0 评论 -
链表——leetcode23 合并K个升序链表
一、题目给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。二、思路可以用小顶堆解答小顶堆知识点https://mp.weixin.qq.com/s/o7tdyLiYm668dpUWd-x7Lg1.二叉堆概览https://blog.csdn.net/u010224394/article/details/8834969二叉堆是完全二叉树或者近似完全二叉树二叉堆多数是以数组作为它们底层元素的存储,根节点在数组中的索引是1,存储在第n个位置的父节原创 2021-09-23 17:15:44 · 117 阅读 · 0 评论