
算法
文章平均质量分 54
算法相关
三少说
预则立,不预则废!
展开
-
LRU自定义最近最少使用-java实现
2.这个题很锻炼自己的owner能力(感觉挑战底层类,不屈于写业务代码)首先想到的是链表,这里使用最普通的 listNode的结构体。4.这个题很锻炼自己的边界能力(各种边界条件需要测试)1.这个题很锻炼自己的编码能力(代码量多,结构多)最近最少使用 翻译下:把最后一个不使用的给踢出去。3.这个题很锻炼自己的耐力(调试比较麻烦)翻译:使用了就放队列前头,想移除就移除队尾。为什么要写博客记录下呢?队尾永远是最近最少使用的。使用的放到队列的前头。原创 2023-10-12 22:59:10 · 453 阅读 · 0 评论 -
leetcode刷题记录
热题top10011. 盛最多水的容器原题地址给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最原创 2022-02-28 22:40:36 · 2160 阅读 · 0 评论 -
LeetCode5.最长回文子串(Java实现)
一:题目描述原题链接5. 最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成二:解题思路(官方解法)如果 s = a 那么最原创 2022-02-03 14:20:19 · 1080 阅读 · 0 评论 -
LeetCode4.寻找两个正序数组的中位数(Java代码)
LeetCode4.寻找两个正序数组的中位数一:题目描述4. 寻找两个正序数组的中位数难度困难4868给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]原创 2022-01-11 20:25:08 · 518 阅读 · 1 评论 -
leetcode1195. 交替打印字符串(java实现)
题目原题连接leetcode1195题目描述:编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是:如果这个数字可以被 3 整除,输出 “fizz”。如果这个数字可以被 5 整除,输出 “buzz”。如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz”。例如,当 n = 15,输出: 1, 2, fizz, 4, buzz, fizz, 7, 8, fizz, buzz, 11, fizz, 13, 14, fizzbuzz。假设有这么一个类:class F原创 2021-06-17 18:35:11 · 450 阅读 · 1 评论 -
两数相加
滴滴面试一轮挂评语:技术可以,算法不行。面试官说给你出个简单的吧:两个大数相加说实话我之前做过,我忘记了,马赛网不能调试,所以只能手撕,当然会部分代码出错,提示了三次才写下来评语:不要着急编码理清思路以及合理性代码package com.yang.leetcode.exam;import java.util.Arrays;/** * @author: fudy * @date: 2021/04/17 下午 03:26 * @Decription: **/public原创 2021-04-17 12:36:32 · 140 阅读 · 0 评论 -
二叉树非递归遍历
中序遍历void InOrderWithoutRecursion2(BTNode* root){ //空树 if (root == NULL) return; //树非空 BTNode* p = root; stack<BTNode*> s; while (!s.empty() || p) { if (p) { s.push(p); p = p->lchild; } else { p = s.top(); s.pop();原创 2021-04-15 23:02:18 · 120 阅读 · 0 评论 -
堆排序 java实现(终于有人让我一遍懂了)
本人参考原博主文章1.概述堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:一般我们用数组来进行落地描述,无论是栈,队列,还是图,最终都是数组或者多维数组来描述。2.直接上思路本人参考原博主文章堆排序的基本原创 2021-04-15 22:41:55 · 189 阅读 · 0 评论 -
leetcode 求子集
leetcode 78 – 求子集双非普本想刷题,不会递归老是迷。碰到乐扣求子集,不会做啊干着急。题目描述(中等难度):给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <原创 2021-04-08 20:30:58 · 276 阅读 · 0 评论 -
快排 java实现
快速排序算法(快排)–java实现1.基本思想 快速排序算法简称 ”快排“ ,是面试中最长问的排序算法,如果你会了冒泡排序,快速排序复杂度是nlogn。不要认为很难,听我用大白话给你说清楚。快速排序我们三句话描述(基数会变化的):基数前的所有数比基数小,我们称为小区间。基数后的所有数比基数大,我们称为大区间。此时 小区间、大区间虽然是无序的,但是我们可以重复1的做法,继续分小区间大区间。到最后,区间很小,只有三个数的时候。小区间一个数,大区间一个数,基数一个数,这是有序的。没听懂? 我原创 2021-04-02 17:59:18 · 1762 阅读 · 3 评论 -
LeetCode104LRU缓存机制_java实现(史上最通俗易懂)
LeetCode104:LRU缓存机制_java实现(史上最通俗易懂)题目概述:点我看原题运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作:获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字/值」。当缓存容量达到上原创 2020-09-16 22:32:55 · 194 阅读 · 0 评论 -
leetCode141环形链表 Java实现(最通俗理解的双指针)
leetCode141:环形链表 Java实现(最通俗理解的双指针)题目分析:给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连原创 2020-09-15 19:26:13 · 235 阅读 · 0 评论 -
LeetCode206反转链表(Java实现)
LeetCode206:反转链表(Java实现)题目概述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL题目分析:题目很简单,我们需要分以下步骤假如 1->2 反转为 2->1 只需要将 2.next = 1即可了如果2.next = 1,则原来的2.next = 3,3节点就数据丢失了,所以在反转之前保存3的值反转完整后,我们下一个要由 2-&原创 2020-09-14 21:54:08 · 316 阅读 · 1 评论 -
leetCode104二叉树的最大深度(java实现)
leetCode104:二叉树的最大深度(java实现)题目概述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。题目解析:如果二叉树为空返回0最好用递归做,因为遍历长度不确定除了叶子节点,每个节点都有孩子如果只有根节点,原创 2020-09-14 21:04:34 · 293 阅读 · 1 评论 -
LeetCode102.二叉树的层序遍历(Java实现)
LeetCode102.二叉树的层序遍历(Java实现)二叉树简介百度百科:二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分 。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该原创 2020-09-14 19:43:46 · 940 阅读 · 0 评论 -
Leetcode-20有效的括号(java实现)
Leetcode-20有效的括号(java实现)题目:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:1. 左括号必须用相同类型的右括号闭合。2. 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false分析:括号是有key-value 关系的括号的关闭顺序是原创 2020-09-14 13:20:05 · 358 阅读 · 2 评论