算法
文章平均质量分 59
菜鸟日常
公众号:菜鸟日常
展开
-
缺失的第一个正数
概述给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。示例 1:输入:nums = [1,2,0]输出:3示例 2:输入:nums = [3,4,-1,1]输出:2示例 3:输入:nums = [7,8,9,11,12]输出:1提示:1 <= nums.length <= 5 * 105-231 <= nums[i] <= 231 - 1思路不通过方案原创 2021-07-22 22:57:48 · 124 阅读 · 0 评论 -
查找数组中第 K 大的数
概述给定整数数组 nums 和整数 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提示:1 <= k <= nums.length <= 104-104 <= nums[i] <= 104来源:力扣(LeetCode原创 2021-07-16 12:48:44 · 1460 阅读 · 0 评论 -
计算第 N 个丑数
概述我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1 是丑数。n 不超过1690。https://leetcode-cn.com/problems/chou-shu-lcof/思路核心思路:计算后面的丑数,就是把前面已计算出的丑数 x2,x3,x5,然后取最小值得到。假设存在 3原创 2021-07-14 09:35:04 · 364 阅读 · 0 评论 -
有效的括号
概述给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true来源:力扣(LeetCode)链接:原创 2021-07-13 14:52:02 · 82 阅读 · 0 评论 -
第三大的数
概述给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。输入:[1, 2]输出:2解释:第三大的数不存在, 所以返回最大的数 2 。输入:[2, 2, 3, 1]输出:1解释:注意,要求返回第三大的数,是指在所有不同数字中排第三大的数。此例中存在两个值为 2 的数,它们都排第二。在所有不同数字中排第三大的数为 1 。提示:1 <= nums.length <= 104-2^31 <= nums[i] <= 2^31 - 1来源:原创 2021-07-10 22:20:05 · 129 阅读 · 0 评论 -
字符串相乘——大整数乘法
概述给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。输入: num1 = “2”, num2 = “3”输出: “6”来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/multiply-strings著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路常规思路: 1234 * 456 = 1234 * 6 + 1234 * 50 + 1234原创 2021-07-10 21:49:26 · 1584 阅读 · 0 评论 -
数组全排列
概述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/permutations著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路DFS 实现public class 全排列 {原创 2021-07-08 22:02:00 · 366 阅读 · 0 评论 -
二叉树的锯齿形层序遍历
概述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路其实就是层次遍历,与层次遍历不同的是每一层的遍历结果,是头插还是尾插的区别思路/** * Definition fo原创 2021-07-06 22:59:29 · 348 阅读 · 2 评论 -
找出数组中的多数元素
概述给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/majority-element著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路排序后取中间元素时间复杂度 O(nlogn)空间复杂度 O(logn),使用语言自带的排序算法的栈空间同归于尽法原创 2021-07-06 22:01:39 · 722 阅读 · 0 评论 -
最长回文串
概述给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-palindrome著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路回文串要保证串中的字符出现次数为 2 的倍数,且最多只有一个奇数出现次数的字符。将字母原创 2021-06-27 20:44:10 · 137 阅读 · 0 评论 -
常见 TOP K 问题的解决思路
概述类似 TOP K 问题:1 亿 个数中找出最大的 100 个1 亿个浮点数,怎么找出第 5 大的数1T 的数据存储用户访问信息,机器内存只有 16 G,如何查出访问频率最高的前 1000 个用户思路堆排序若数据量比较小,机器内存空间较大,直接使用一个小根堆或者大根堆保存 TOP K 的数据,每次遍历的时候与堆的根元素进行比较,并调整堆中的元素。空间复杂度:O(1)时间复杂度:O(NlogK),N 为总数据量,K 为要求的前 K 个数的值分治 + 堆排序机器内存紧张,可以将大的数原创 2021-06-27 18:52:14 · 277 阅读 · 0 评论 -
打开转盘锁
题目介绍你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以原创 2021-06-25 23:03:01 · 291 阅读 · 0 评论 -
二进制中1的个数
请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。利用已有工具类public class Solution { // you n原创 2021-06-23 20:44:48 · 107 阅读 · 1 评论 -
二进制手表
二进制手表顶部有 4 个 LED 代表 小时(0-11),底部的 6 个 LED 代表 分钟(0-59)。每个 LED 代表一个 0 或 1,最低位在右侧。例如,下面的二进制手表读取 “3:25” 。给你一个整数 turnedOn ,表示当前亮着的 LED 的数量,返回二进制手表可以表示的所有可能时间。你可以 按任意顺序 返回答案。小时不会以零开头:例如,“01:00” 是无效的时间,正确的写法应该是 “1:00” 。分钟必须由两位数组成,可能会以零开头:例如,“10:2” 是无效的时原创 2021-06-21 21:44:52 · 725 阅读 · 0 评论 -
复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)https://www.nowcoder.com/practice/f836b2c43afc4b35ad6adc41ec941dba解题想法比较有技巧,放一张图就知道怎么...原创 2020-01-14 19:31:09 · 140 阅读 · 0 评论 -
二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca解题想法深度优先搜索、递归回溯:先序遍历每一条路径...原创 2020-01-14 19:31:35 · 131 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd解题想法分治递归思想:序列最后一个元素是根节点,而二叉搜索树的根节点左边的序列值比根小,右边的比根大。根据这个特...原创 2020-01-14 19:29:24 · 196 阅读 · 0 评论 -
层次遍历二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。https://www.nowcoder.com/practice/7fe2212963db4790b57431d9ed259701解题想法队列实现,保存左节点、右节点,然后按照先进先出的顺序打印代码实现import java.util.ArrayList;import java.util.LinkedList;impo...原创 2020-01-14 19:31:44 · 172 阅读 · 0 评论 -
栈的压入弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5 是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)https://www.nowcoder.com/practice/d77d114...原创 2020-01-14 19:27:54 · 185 阅读 · 0 评论 -
包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。https://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49解题想法思路一:使用两个栈,栈 A 保存元素,栈 B 保存此时栈 A 的最小值。每添加一个元素时,判断添加的元素值与栈 B 顶部元素做比较,然后把最...原创 2020-01-14 19:27:26 · 155 阅读 · 0 评论 -
二叉树镜像
题目描述操作给定的二叉树,将其变换为源二叉树的镜像。https://www.nowcoder.com/practice/564f4c26aa584921bc75623e48ca3011解题想法递归思路:交换其左右子树,然后递归调用,交换子树。非递归思路:涉及到反转,就应该想到栈,使用栈进行反转交换代码实现递归版本/**public class TreeNode { i...原创 2020-01-14 19:26:46 · 124 阅读 · 0 评论 -
树的子结构
题目描述输入两棵二叉树A,B,判断 B 是不是 A 的子结构。(ps:我们约定空树不是任意一个树的子结构)https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88解题想法找到相同的根节点,遍历左右子树,相同返回 true遍历大树,找到两个相同值的根节点对相同的节点子树进行遍历,若有不同的返回 false...原创 2020-01-14 19:26:13 · 155 阅读 · 0 评论 -
几种常见的加密算法及 Java 实现
介绍本文主要对加密算法做个概况性的介绍,然后给出几种简单的加密算法 Java 实现。1. 算法种类单向加密对称加密非对称加密1.1 单向加密即加密之后不能解密,一般用于数据验证1) Base64Base64 编码是从二进制到字符的过程,用 64 个字符来表示任意的二进制数据,常用于在 HTTP 加密,图片编码传输等。可打印字符:在ASCII码中规...原创 2018-08-22 19:40:54 · 13894 阅读 · 0 评论 -
数据结构基本排序算法 Java 实现
排序算法介绍基本概念稳定性: 待排序的数列中,若两个元素的值相等 R1 = R2 ,在排序结束之后,元素之间的相对位置没有发生变化,则称排序算法是稳定的,否则是不稳定的。算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法性质进行描述。内部排序排序期间元素全部存放在内存中。插入排序每次将待排序的元素插入到前面已排好序的子序列中直接插入排序思路:第 i 次排序,将第 i 个元素插入到前面原创 2017-09-19 09:10:26 · 712 阅读 · 0 评论