![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法分析
文章平均质量分 74
亦泽同学
欢迎关注微信公众号:从来不想
展开
-
算法-N进制加法
N进制加法1、N进制加法1、N进制加法最近遇到了一个问题,如何实现36进制加法?这个问题挺有意思。对于常见的10进制和二进制,我们往往都是一加了之,相加之后进位,进位再与前面的一位相加,再重复上述步骤,就得到了我们想要的值,对于10进制内的数我们这样相加没啥问题,但是对于N进制,则需要考虑下其中的本质问题。在10进制以内,我们通过取余得到了新的值,本质上是对0-9这十个数字进行了取余查字典,那么对于N进制,我们同样可以取余查字典,只不过字典需要我们自己构造。对于36进制来讲,我们可以把0-9,A-Z作原创 2021-01-29 22:35:15 · 2267 阅读 · 0 评论 -
算法-找出数组中所有重复元素
算法-找出数组冲所有重复元素算法-找出数组冲所有重复元素算法-找出数组冲所有重复元素本题目源于 Leetcode 422 是一道技巧类型的题目442. 数组中重复的数据给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度), 其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]如果按照普通的方法看,本题可以用hashma原创 2021-01-28 20:35:08 · 3268 阅读 · 0 评论 -
算法-寻找数组中承上启下的元素
文章目录1、寻找数组中承上启下的元素1、寻找数组中承上启下的元素题目来源:https://www.nowcoder.com/discuss/478118 (上海抖音客户端开发面经)众所周知,字节跳动非常注重算法题,算法往往成为一张否决票,暑期实习面字节,我就在三面的最后一道算法题栽了跟头,导致一开始没有拿到实习的offer。。。。先看一下题目描述:寻找k:在无序数组中,k的所有左值比它更小,所有右值比他更大。限定o(n)。本题其实比较简单,存在一种O(N^2)的算法(挨个遍历每个元素,看一下原创 2020-08-16 17:06:27 · 249 阅读 · 0 评论 -
算法-买票问题
题目描述:现在有n个人排队买票,已知是早上八点开始卖票,这n个人买票有两种方式,第一种是每个人都可以单独去买自己的票,第i个人花费i秒,第二种是每个人都可以选择和后面的人一起买票,第i个人和第i+1个人一共花费b[i]秒。最后一个人只能和前一个...原创 2020-08-08 21:39:47 · 2554 阅读 · 0 评论 -
算法-再探无序数组中位数问题
算法-再探无序数组中位数问题算法-再探无序数组中位数问题算法-再探无序数组中位数问题给定一个无序数组,求无序数组的中位数本问题在前面写的博客里面提到过算法-TopK相关的问题原创 2020-07-26 16:15:59 · 332 阅读 · 0 评论 -
设计-LruCache的实现
设计类-LruCache的设计与实现设计类-LruCache的设计与实现设计类-LruCache的设计与实现LruCache的运用相当广泛,在加载图片等大文件时,难以离开LruCache和软引用,例如Android著名的图片加载库Glide以及网络请求库OkHttp就使用到了LruCache。在集合框架中,LinkedHashMap也可以原生的支持LruCache功能。先看一下题目描述运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get原创 2020-07-12 16:11:07 · 316 阅读 · 0 评论 -
算法-最小覆盖子串
算法-最小覆盖子串1、算法-最小覆盖子串1、算法-最小覆盖子串本题来源于:LeetCode-76 难度hard。给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = "ADOBECODEBANC", T = "ABC"输出: "BANC"说明:如果 S 中不存这样的子串,则返回空字符串 ""。如果 S 中存在这样的子串,我们保证它是唯一的答案。题目很好理解,翻译成大白话就是在字符串S中,找出一段包含字符串T中所有元素的,原创 2020-07-12 15:06:11 · 305 阅读 · 0 评论 -
算法-判断链表是否为回文链表
算法-判断链表是否为回文链表1、判断链表是否为回文链表1、判断链表是否为回文链表题目来源:Leetcode234,是一道easy题。请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-原创 2020-06-27 22:37:40 · 351 阅读 · 0 评论 -
2020 vivo春招笔试题解析
2020 vivo春招笔试第三题解析统计第N天手机产量统计第N天手机产量看一下题目描述/** * 在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。 * 假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 ... ... * 以此类推,请编程计算出第n天总共可以量产的手机数量。 * 输入例子1: * 11 * * 输出例子1: * 35 * * 例子说明1: * 第11天工人总共可以量产的手原创 2020-06-07 17:16:16 · 1366 阅读 · 2 评论 -
2021 vivo校招提前批笔试解析
2021 vivo校招提前批笔试解析1、种花情况1:排除端点情况2:考虑端点2、质量测试3、合并流水线题目不能完整的记下来,目测后面vivo会把题目放到牛客上,这里先给一些解析1、种花题目大意:输入一个数字n代表花园长度,花园可以看作是一个数组,相邻的两个不能同时为1,问最多能种几棵花。例子:输入:51 0 0 0 0输出:2因为最多的情况是这样的:1 0 1 0 1即能种两棵花刚开始我以为是动态规划问题,浪费了很多时间,后来发现是一个找规律的问题。解题思路:情况1:排除原创 2020-06-07 17:00:40 · 2100 阅读 · 0 评论 -
算法-Z字形变换
算法-Z字形变换1、Z字形变换1、Z字形变换6. Z 字形变换 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。 请你实现这个将字符串进行指定行数变换的函数: string c原创 2020-05-16 00:16:09 · 1437 阅读 · 0 评论 -
算法-和为K的子数组
算法-和为K的子数组1、和为K的子数组1、和为K的子数组560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。这个题是字节面试题,也是L...原创 2020-05-08 20:57:26 · 2078 阅读 · 0 评论 -
算法-验证栈序列
算法-验证栈序列1、验证栈序列1、验证栈序列946. 验证栈序列给定 pushed 和 popped 两个序列,每个序列中的 值都不重复,只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时,返回 true;否则,返回 false 。 示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4), pop原创 2020-05-08 19:28:07 · 787 阅读 · 0 评论 -
算法-三个数的最大乘积(K很小时的TopK问题)
三个数的最大乘积1、三个数的最大乘积2、求最大的三个数1、三个数的最大乘积本题来源于:628. 三个数的最大乘积难度easy。给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积。示例 1:输入: [1,2,3]输出: 6示例 2:输入: [1,2,3,4]输出: 24注意:给定的整型数组长度范围是[3,104],数组中所有的元素范围是[-1000,...原创 2020-05-05 21:10:16 · 860 阅读 · 0 评论 -
算法-根据二叉树创建字符串
算法-根据二叉树创建字符串1、根据二叉树创建字符串1、根据二叉树创建字符串本题来源于:606. 根据二叉树创建字符串。是一个easy类型的题,但是却对我们掌握递归思想有很大的帮助。有人说,理解递归,首先要理解递归。。。可见递归思想并不是那么直白,需要我们自己去理解。递归就是一个不断调用自身的一个过程,并且随着递归深度增加,锁解决的问题越来越小,当满足递归终止条件之后,解决的小问题拼合成最终...原创 2020-05-05 20:06:22 · 338 阅读 · 0 评论 -
算法-摆动序列
算法-摆动序列1、摆动序列1、摆动序列376. 摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个...原创 2020-05-04 12:04:09 · 360 阅读 · 0 评论 -
算法-根据字符出现频率排序
算法-根据字符出现频率排序1、根据字符出现频率排序1、根据字符出现频率排序451. 根据字符出现频率排序给定一个字符串,请将字符串里的字符按照出现的频率降序排列。示例 1:输入:"tree"输出:"eert"解释:'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。示例 2:输入:"ccca...原创 2020-04-30 22:45:42 · 2179 阅读 · 0 评论 -
算法-单调栈问题合集
算法-单调栈问题合集1、移掉K位数字,使剩下的数字保持最小2、移掉K位数字,使剩下的数字保持最大单调栈顾名思义是一种单调递增或者单调递减的栈,虽然很简单,但是的确是一种高级数据结构。之前我写的文章 算法-摩天大楼问题 就是采用单调栈进行优化的。这里再给出几个单调栈问题借助于单调栈的特点,我们可以优化一些算法的时间复杂度1、移掉K位数字,使剩下的数字保持最小本题也是华为2020-04-2...原创 2020-04-30 19:17:19 · 404 阅读 · 0 评论 -
算法-无重复字符的最长字串
算法-无重复字符的最长字串无重复字符的最长字串无重复字符的最长字串3. 无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 示例 2: 输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所...原创 2020-04-27 22:02:14 · 184 阅读 · 0 评论 -
算法-环形链表问题
这里写目录标题1、环形链表2、环形链表II1、环形链表141. 环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。...原创 2020-04-20 12:12:51 · 208 阅读 · 0 评论 -
算法-二叉树的最近公共祖先
算法-二叉树的最近公共祖先二叉树的最近公共祖先二叉树的最近公共祖先236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3...原创 2020-04-20 11:38:33 · 584 阅读 · 0 评论 -
算法-岛屿问题专辑
算法-岛屿问题专辑1、岛屿数量2、被围绕的区域3、岛屿最大面积4、岛屿周长遇到岛屿问题,基本上就是一种算法:深搜+记忆化搜索。1、岛屿数量List item200. 岛屿数量给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:111...原创 2020-04-19 22:05:17 · 1909 阅读 · 0 评论 -
算法-矩阵遍历问题专辑
算法-矩阵遍历问题专辑1、螺旋矩阵2、旋转图像3、搜索二维矩阵 II4、搜索二维矩阵1、螺旋矩阵54. 螺旋矩阵给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。示例 1:输入:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]输出: [1,2,3,6,9,8,7,4,5]示例 2:...原创 2020-04-19 21:29:51 · 805 阅读 · 0 评论 -
算法-栈和队列的相互转换
栈和队列的相互转换1、两个栈实现一个队列2、队列实现栈由于两种方法都很简单,这里就不多说了1、两个栈实现一个队列 class MyQueue{ private Stack<Integer> input; private Stack<Integer> output; public MyQueue() { ...原创 2020-04-13 17:23:59 · 141 阅读 · 0 评论 -
算法-快排思想之 反转字符串中的元音字母
算法-快排思路之 反转字符串中的元音字母快排思想之 反转字符串中的元音字母快排思想之 反转字符串中的元音字母345. 反转字符串中的元音字母编写一个函数,以字符串作为输入,反转该字符串中的元音字母。示例 1:输入: "hello"输出: "holle"示例 2:输入: "leetcode"输出: "leotcede"说明:元音字母不包含字母"y"。快排大家都知道了,...原创 2020-04-12 00:24:28 · 175 阅读 · 0 评论 -
算法-单词规律
算法-单词规律单词规律单词规律290. 单词规律给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = "abba", str = "dog cat cat dog"输出: true示...原创 2020-04-11 23:48:40 · 310 阅读 · 0 评论 -
算法-不同路径问题
不同路径问题1、不同路径(I)1.1 初步解1.2 时间优化2、不同路径(II)1、不同路径(I)62. 不同路径本问题是动态规划的一个比较经典的题目,和跳台阶问题本质上是一样的,只是跳的位置不一样而已。 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish...原创 2020-04-09 23:37:42 · 1643 阅读 · 0 评论 -
算法-合并区间
算法-合并区间算法-合并区间算法-合并区间这题也挺有意思。力扣(LeetCode56)给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]...原创 2020-04-05 17:18:04 · 287 阅读 · 0 评论 -
算法-不使用加减法符号实现两数相加减,两种实现方式
算法-不使用加减法实现两数相加Leetcode-371不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1看到大佬们给出的代码的确很简洁,但是同样的,也很难懂,这里给出一种非常直观的解法主要思路:1、从1<<...原创 2020-04-05 11:58:26 · 1515 阅读 · 0 评论 -
算法-三角形最小路径
算法-三角形最小路径1、三角形最小路径(n^2空间复杂度)2、三角形最小路径(n空间复杂度)1、三角形最小路径(n^2空间复杂度)120. 三角形最小路径和 难度为medium给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小...原创 2020-04-04 23:15:16 · 458 阅读 · 0 评论 -
算法-数组的最长连续序列长度
算法-数组的最长连续序列长度1、数组的最长连续序列长度1、数组的最长连续序列长度题目是Hard级别的,因为我们要把时间复杂度降低到n128. 最长连续序列给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。看...原创 2020-04-04 22:14:11 · 868 阅读 · 0 评论 -
算法-二叉树路径问题
算法-二叉树路径问题1、判断二叉树中是不是有给定和的路径2、找出二叉树中给定和的所有路径3、二叉树中的所有路径4、二叉树中最大路径和5、二叉树的最大直径二叉树的路径问题一般可以用DFS搜索来解决,递归的思想一定要理解(注重最后一步和终止条件)1、判断二叉树中是不是有给定和的路径 // public boolean hasPathSum(TreeNode root, int sum) ...原创 2020-04-04 21:04:55 · 439 阅读 · 0 评论 -
算法-前K个高频元素
算法-前K个高频元素前K个高频元素前K个高频元素347. 前 K 个高频元素给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。...原创 2020-04-04 19:15:10 · 199 阅读 · 0 评论 -
算法-比特位计数
算法-比特位计数1、比特位计数1、比特位计数338. 比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1]示例 2:输入: 5输出: [0,1,1,2,1,2]进阶:给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但...原创 2020-04-04 14:10:53 · 368 阅读 · 0 评论 -
算法-只出现一次的数字(原理讲解)
算法-只出现一次的数字1、只出现一次的数字(I)2、只出现一次的数字(II)3、只出现1次的数字(III)这三道题目也是Leetcode上的,考察的是对位运算的掌握程度。当然用HashMap也是可以做的。这里只讲位运算。1、只出现一次的数字(I)136. 只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的...原创 2020-04-04 13:03:24 · 2829 阅读 · 0 评论 -
算法-寻找数组中的重复值,四种解法
算法-寻找数组中的重复值寻找数组中的重复值寻找数组中的重复值题目来源于:Leetcode-287。本题归类到简单我无法理解…要满足四个条件需要用很特定的解法,面试中要是用到的话很可能是在给自己挖坑,所以我这里只讲几种能满足一部分条件的解法。给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找...原创 2020-04-04 00:33:58 · 10534 阅读 · 0 评论 -
算法-最长上升序列
算法-最长上升序列1、最长上升序列(连续)2、最长上升序列(非连续)1、最长上升序列(连续)连续的最长上升序列是很简单的,我们可以用动态规划来完成,下面给出三次优化,将其时间复杂度控制在O(n),空间复杂度控制在O(1)状态方程dp[i]=nums[i]>nums[i-1]?dp[i-1]+1:1; @Test public void test(){ ...原创 2020-04-03 22:01:07 · 255 阅读 · 0 评论 -
算法-最大子序列和
算法-最大子序列和题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。public int maxSubArray(int[] nums) { int max=nums[0]; int...原创 2020-04-02 13:09:30 · 172 阅读 · 0 评论 -
算法-[0,99]范围内随机数不重复地放入长度为100的数组
算法-[0,99]范围内随机数不重复地放入长度为100的数组随机数填充随机数填充这个题目看着比较特别,就记录一下题目是这样的:[0,99]范围内随机数不重复地放入长度为100的数组刚开始想是无处下手的,其实利用HashSet/HashMap的话其实时间复杂度是无穷大。我们只能先生成数据,然后打乱数据的排序。 public static void main(String[] ar...原创 2020-04-02 12:55:06 · 620 阅读 · 0 评论 -
算法-秒杀数组元素位置调整类问题
算法-数组元素位置调整1、给定一个数组,将奇数(正数...etc)排在左边,偶数排在右边2、给定一个数组,将奇数(正数...etc)排在左边,偶数排在右边(保证相对位置不变)这类题目有点特别,不要求我们对数组元素进行像正常排序那样从大到小或者从小到大,而是要求我们使用O(N)的方法将符合条件的元素排在前面或者后面。其实这是排序的一种变形,不需要我们消灭逆序数。解决思路有两类:1、利用快排思想...原创 2020-04-02 12:12:49 · 232 阅读 · 0 评论