算法
文章平均质量分 69
数据结构与算法
喜欢前端的后端MelodyJerry
喜欢前端的全栈攻城狮的MelodyJerry,奋斗在全栈路上
【个人三大博客汇总】:
https://www.cnblogs.com/melodyjerry/p/13305991.html
展开
-
[LeetCode-678] 有效的括号字符串
发布于个人公众号,打开微信,搜索MelodyJerry即可678. 有效的括号字符串难度中等通过率38.36%(40,269/104,970)给定一个只包含三种字符的字符串:(,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。* 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为.原创 2021-09-13 17:29:38 · 7920 阅读 · 0 评论 -
[LeetCode-678] 有效的括号字符串
发布于个人公众号,打开微信,搜索MelodyJerry即可678. 有效的括号字符串难度中等通过率38.36%(40,269/104,970)给定一个只包含三种字符的字符串:(,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。* 可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为.原创 2021-09-13 17:26:50 · 7614 阅读 · 0 评论 -
[面试|算法] 三种不同组合情况,还原二叉树
前序字节秋招一面(提前批,商业化技术,base深圳)和美团秋招(base上海),都出现了差不多的算法题:根据数组形式的二叉树的前序序列和中序序列,假设树种没有重复元素,现要求还原该二叉树,并返回该二叉树的层次序列、后序序列。当时手撕算法,是以牛客ACM模式,要求自己建立数据结构,传入数组,实现算法。但只是懂的根据前序序列和中序序列来还原二叉树还是不够的,其他的组合情况也要掌握,在后文一并解决这个。还原二叉树✔4种遍历方式先来确定二叉树的4种遍历方式:层次序列/层次遍历:访问根节点从上到下、从左到右,一次遍历原创 2021-08-25 13:30:42 · 7706 阅读 · 2 评论 -
NC28 最小覆盖子串
发布于个人公众号,打开微信,搜索MelodyJerry即可NC28 最小覆盖子串难度通过率时间限制空间限制较难30.49%1秒64MB描述:给出两个字符串 S 和 T,要求在O(n)O(n)O(n)的时间复杂度内在 S 中找出最短的包含 T 中所有字符的子串。例如:S ="XDOYEZODEYXNZ"T ="XYZ"找出的最短子串为"YXNZ".注意:如果 S 中没有包含 T 中所有字符的子串,返回空字符串 "";满足条件的子串可能有很多,但.原创 2021-08-03 17:21:50 · 8091 阅读 · 0 评论 -
[LeetCode-76] 最小覆盖子串
发布于个人公众号,打开微信,搜索MelodyJerry即可76. 最小覆盖子串难度困难通过率42.07%(161514/383873)给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1:输入:s = "ADOBECOD.原创 2021-08-03 17:20:22 · 7603 阅读 · 0 评论 -
[LeetCode-671] 二叉树中第二小的节点
发布于个人公众号,打开微信,搜索MelodyJerry即可671. 二叉树中第二小的节点难度简单通过率47.54%(37459/78782)给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个。更正式地说,root.val = min(root.left.val, root.right.val) 总成立。给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二.原创 2021-07-27 14:39:00 · 7530 阅读 · 0 评论 -
[LeetCode-3] 无重复字符的最长子串
发布于个人公众号,打开微信,搜索MelodyJerry即可3. 无重复字符的最长子串难度中等通过率37.57%(1106175/2943963)给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3.原创 2021-07-25 22:07:55 · 7508 阅读 · 0 评论 -
[LeetCode-2] 两数相加
发布于个人公众号,打开微信,搜索MelodyJerry即可2. 两数相加难度中等通过率40.51%(909,450/2,244,760)给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例 1:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342.原创 2021-07-19 22:26:35 · 7531 阅读 · 2 评论 -
[LeetCode-1] 两数之和
发布与个人公众号,打开微信,搜索MelodyJerry即可1. 两数之和难度简单通过率51.59%(2,261,780/4,383,614)给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9.原创 2021-07-19 22:24:39 · 7536 阅读 · 1 评论 -
[LeetCode-53] 最大子序和
发布于个人公众号,打开微信,搜索MelodyJerry即可## 53. 最大子序和LeetCode官方的难度定位为简单,个人觉得可以达到中等的!!!难度简单通过率54.64%(571,167/1,045,196)给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 .原创 2021-07-17 23:17:12 · 7551 阅读 · 0 评论 -
[剑指Offer-42] 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和❝LeetCode官方的难度定位为简单,个人觉得可以达到中等的!!!❞难度简单通过率60.29%(182,636/302,898)输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为 。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1原创 2021-07-17 23:12:23 · 7531 阅读 · 1 评论 -
[剑指Offer-53-I] 在排序数组中查找数字 I
剑指 Offer 53 - I. 在排序数组中查找数字 I难度简单通过率54.1%(151473/279954)统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0限制:0 <= nums.length <= 50000题解二分查找,找左边界这种题目,要是没有其他要求,就原创 2021-07-17 00:05:43 · 7559 阅读 · 0 评论 -
[算法|LeetCode] 数组系列(持续更新ing)
难度:简单26. 删除有序数组中的重复项难度简单通过率54.01%(718,156/1,329,468)题目描述:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想原创 2021-07-10 22:12:08 · 7570 阅读 · 3 评论 -
利用栈的特性,逆序打印链表
题目描述输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000题解思路题目要求 “逆序” 打印,逆序?那不就是可以用栈来做?栈的特性:先进后出、后进先出。链表节点全部进栈后再依次出栈,这不就是逆序结果了吗?是吧,可以好好利用 栈的特性 解决这题。题解代码/** * Definition for singly-linked list. *原创 2021-06-04 17:34:05 · 7649 阅读 · 0 评论 -
公开密钥加密算法
公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。常见的公钥加密算法有: RSA、ElGamal、背包算法、Rabin(RSA的特例)、迪菲-赫尔曼密钥交换协议中的公钥加密算法、椭圆曲线加密算法(Elliptic Curve Cryptography, ECC);DSA数字签名(又称公钥数字签名),将摘要信息用发送者的私钥加密,接收.原创 2021-05-22 22:44:44 · 11511 阅读 · 2 评论 -
[面试|算法|二叉树] 面试官:利用4种遍历方式实现“翻转二叉树”
题目描述如题,翻转一棵二叉树。输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1/* Definition for a binary tree node. */public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode()原创 2021-05-08 20:34:20 · 8096 阅读 · 0 评论 -
[面试|面经] 人生的第一次面试,凉经吧
字节飞书Java实习一面,凉凉~全程43min左右,在飞书上视频面试面试官很年轻,自称也是实习生人还挺好交流的,我紧张4、5次,他让我别紧张,也允许我重新组织语言回答。自我介绍计算机网络:TCP的三次握手、四次挥手TCP和UDP的区别UDP如何实现可靠传输了解过滑动窗口吗?具体说说Java:知道Java有什么锁,具体说明说说单例模式SpringBoot:IOC的原理?好处?AOP的原理?好处?自动装载机制的原理说说SpringBoot的事务处理MySQL:原创 2021-05-07 20:51:50 · 8367 阅读 · 0 评论 -
[算法|二分查找] 《有重复数字的升序数组的二分查找》
题目描述请实现有重复数字的升序数组的二分查找:给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1示例1输入[1,2,4,4,5],4输出2说明从左到右,查找到第1个为4的,下标为2,返回2 示例2输入[1,2,4,4,5],3输出-1示例3输入[1,1,1,1,1],1输出0题解思路第一想法:既然是二分查找,那就把二分查原创 2021-04-30 18:12:13 · 10217 阅读 · 2 评论 -
[面试|HashMap|红黑树] 转载:HashMap到8时转为红黑树到6转为链表 原因详解
来源:HashMap到8时转为红黑树到6转为链表 原因详解原创 2021-04-27 15:15:08 · 11254 阅读 · 0 评论 -
【LeetCode】5738. K 进制表示下的各位数字总和
题目地址5738. K 进制表示下的各位数字总和题目描述给你一个整数 n(10 进制)和一个基数 k ,请你将 n 从 10 进制表示转换为 k 进制表示,计算并返回转换后各位数字的 总和 。转换后,各位数字应当视作是 10 进制数字,且它们的总和也应当按 · 进制表示返回。示例 1:输入:n = 34, k = 6输出:9解释:34 (10 进制) 在 6 进制下表示为 54 。5 + 4 = 9 。示例 2:输入:n = 10, k = 10输出:1解释:n 本身就原创 2021-04-25 14:03:08 · 9575 阅读 · 0 评论 -
[算法]找出第k小的元素
题目描述从数组a[]中找出第k小的元素。分析使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的。解决import java.util.Random;public class Main{ public static int quickSelect(int arr[], int l, int r, int k) { Random rand = new Random(); int p = rand.nextInt(r - l + 1) + l;原创 2021-04-08 22:07:33 · 9298 阅读 · 1 评论 -
[动态规划]测试次数
题目描述x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测 试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样 的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。如果到了塔的最高层第n层扔没原创 2021-04-08 17:06:08 · 8945 阅读 · 0 评论 -
蓝桥杯往年试题练习合集(带答案)更新ing
蓝桥杯文章目录蓝桥杯1. 字符逆序2. 用筛法求之N内的素数3. 字符串的输入输出处理4. 斐波那契数列(Fibonacci)5. 闰年判断6. 马虎的计算7. 不同的字串8. 三项数列求值9. 数的分解1. 字符逆序题目描述将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。输入输入包括一行。 第一行输入的字符串。输出输出转换好的逆序字符串。样例输入I am a student样例输出tneduts a ma Iimport java.uti原创 2021-04-04 21:04:06 · 11841 阅读 · 2 评论 -
蓝桥杯练习合集(更新中)
1. 字符逆序题目描述将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。输入输入包括一行。 第一行输入的字符串。输出输出转换好的逆序字符串。样例输入I am a student样例输出tneduts a ma Iimport java.util.Scanner;public class Main { public static void main(String[] args) { Scanner input = new原创 2021-03-22 20:09:04 · 2927 阅读 · 0 评论 -
3种场景不同方法遍历Map集合的效率比较
测试用例//HashMap1:大小为1000000,//key和value的值均为String,//key的值为1、2、3.........1000000Map<String,String> map1 =new HashMap<String,String>();String key1,value1;for(int i=1;i<=1000000;i++){ key1 = ""+i; value1="value"+i; map1.put(key1原创 2021-02-21 19:56:07 · 1807 阅读 · 0 评论 -
HashMap、TreeMap和HashTable的区别
https://www.cnblogs.com/sidekick/p/8010522.htmlMap接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable。TreeMap是有序的,HashMap和HashTable是无序的。Hashtable的方法是同步的,HashMap的方法不是同步的。这是两者最主要的区别。这就意味着Hashtable是线程安全的,HashMap不是线程安全的。HashMap效率较高,Hashtable效率较低。 如果对同步性或与遗留代码的兼容性.原创 2021-02-20 11:23:50 · 1668 阅读 · 3 评论 -
[转]分享文章《真实世界的异或运算》
位运算是神器,异或是神器中的神器,强烈推荐阅读@liuyubobobo 老师的文章:真实世界的异或运算。以下内容全部转载于原文!对于底层开发来说,位运算是非常重要的一类操作。而对于位运算来说,最有意思的,应该就是异或运算(XOR)了。提到异或运算,很多同学可能首先想到的就是一个经典的,和异或运算相关的面试问题:给你一个包含有 n - 1 个元素的数组,其中每个数字在 [1, n] 的范围内,且不重复。也就是从 1 到 n 这 n 个数字,有一个数字没有出现在这个数组中。编写一个算法,找到这个丢.转载 2021-02-14 15:04:27 · 238 阅读 · 0 评论 -
Java集合-Set
2020.12.31 更新待补充、完善ing……Set概述set集合不能存储相同的元素同时因为其是一个抽象的接口:所以不能直接实例化一个set对象。Set s = new Set() :×该接口主要继承于Collections接口,所以具有Collection的一些常见的方法。常见用法Sr.No.MethodDescription1add( )向集合中添加元素2clear( )去掉集合中所有的元素3contains( )判断集合中是否包含某原创 2021-01-01 18:02:12 · 461 阅读 · 0 评论 -
Java中List集合的常用方法(更新ing)
整理了去年的笔记,原先用的是Eclipse,现在用惯了IDEA后续继续更新内容ListList接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来。常用方法:void add(int index, E element)在指定位置插入元素,后面的元素都往后移一个元素。boolean addAll(int index, Collection<? extends E> c)在指定的位置中插入c集合全部的元素,如果集合发生.原创 2020-12-13 17:26:49 · 2969 阅读 · 0 评论 -
Java的Collection集合的常用方法(更新ing)
整理了去年的笔记,原先用的是Eclipse,现在用惯了IDEA常用方法boolean add(E e)添加元素到Collection集合中。boolean addAll(Collection<? extends E> c)将指定c中的所有元素都添加到此Collection集合中。void clear()移除此collection集合中的所有元素boolean contains(Object o)检查Collection集合中是否包含o对象,如果.原创 2020-12-13 17:23:41 · 603 阅读 · 0 评论 -
头一次知道“原地算法”?!
在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部份覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。...原创 2020-12-13 17:17:25 · 515 阅读 · 0 评论 -
生成n位的所有二进制数
需求要求输入位数n,生成所有情况的二进制数并存进数组实现12345678910111213141516171819202122232425262728293031import java.util.ArrayList;import java.util.List;/** * @Classname BinaryList * @Description 输入位数n,生成所有情况的二进...原创 2020-03-12 04:48:52 · 3445 阅读 · 0 评论 -
【LeetCode】面试题29. 顺时针打印矩阵
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 1000 <= matrix[i].lengt原创 2020-06-05 12:13:08 · 1619 阅读 · 0 评论 -
[转]什么是动态规划(Dynamic Programming)?动态规划的意义是什么?
什么是动态规划(Dynamic Programming)?动态规划的意义是什么?这可能是我目前见过的最通俗易懂的入门介绍吧转载 2020-06-04 12:52:15 · 200 阅读 · 0 评论 -
【LeetCode】面试题64. 求1+2+…+n
来自《剑指Offer(第二版)》题目描述求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。示例 1:输入: n = 3输出: 6示例 2:输入: n = 9输出: 45限制:1 <= n <= 10000题解逻辑(短路)与看完标题,发现这是一道面试题!!!看到第一行的“要求不能使用……”,我人傻了,没错,就是人傻了~~想用“递归”,但是乘除法原创 2020-06-02 15:24:42 · 1706 阅读 · 0 评论 -
[转]剑指offer第二版总结——基于牛客网
剑指offer第二版总结——基于牛客网1. 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public class Solution { public boolean Find(int target, int [][] array) { int row = array.length; int col转载 2020-06-02 15:23:49 · 513 阅读 · 0 评论 -
【LeetCode】101. 对称二叉树
题目描述给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?题解思路阅读完题目,脑子里先是想到了栈这种数据结构。栈的一个特性:先进后出、后原创 2020-06-02 14:42:23 · 1567 阅读 · 0 评论 -
【LeetCode】198. 打家劫舍
题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。原创 2020-06-02 14:39:44 · 1611 阅读 · 0 评论 -
【LeetCode】1431. 拥有最多糖果的孩子
首先祝Jerry生日快乐!今天这个打卡题是关于“糖果”的,恰好六一儿童节。题目描述给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。示例 1:输原创 2020-06-02 14:37:08 · 1667 阅读 · 0 评论 -
【LeetCode】287. 寻找重复数
题目描述给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n^2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。题解本题原创 2020-06-02 14:42:36 · 1570 阅读 · 0 评论