自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(196)
  • 收藏
  • 关注

原创 爱奇艺笔试 n!末尾有几个0

分析:看到这个问题,有人可能第一反应是先求出N!,然后再根据求出的结果,最后得出N!的末尾有多少个0。但是转念一想,会不会溢出。其实,从”哪些数相乘可以得到10”这个角度,问题就变得比较的简单了。首先考虑,如果N的阶乘为K和10的M次方的乘积,那么N!末尾就有M个0。N的阶乘可以分解为: 2的X次方,3的Y次方,5的次Z方……的一系列质因子相乘。由于10 = 2 * 5,所以M只能和X和Z有关,每一对2和5相乘就可以得到一个10,于是M = MIN(X,Z),因为是阶乘,所以2的次方X大于5的次方Z,

2020-08-23 22:27:46 182

原创 自己实现hashmap、linkedhashmap

参考了JDK1.8源码,自己实现一个简单的,源码里有很多位运算。我这里化为简单的实现了。这里使用1.8以后的尾插法。只实现了 put 、resize、get方法。package com.meng.hashmap;public class MyHashMap { private Entry[] table; private static int initialCapacity = 16; private static double loadFactor = 0.75;

2020-08-20 23:14:27 171

原创 背包九讲(B站)

01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51

2020-08-08 18:39:22 5115

原创 猿辅导秋招笔试题

第一题:两个数字一组的上课区间,问最少一心几用?import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.HashMap;import java.util.Set;/** * @Description:上猿辅导课所需要的超能力 * @Create 2020-08-01 19:21 * @Email:[email protected]

2020-08-06 15:58:37 1086

原创 394 字符串解码、406 根据身高重建队列、416 分割等和子集(等于)0-1背包、437 路径总和3 递归、448 找到所有数组中消失的数字、461 汉明距离 位运算异或、543 二叉树的直径

394 字符串解码 栈406 根据身高重建队列 自定义排序 按k插入416 分割等和子集 0-1背包437 路径总和3 递归438 找到字符串中所有字母异位词 滑动窗口hashmap448 找到所有数组中消失的数字 下标当作数461 汉明距离 位运算 异或494 目标和 (填+/-)538 把二叉搜索树转换为累加树(中序遍历反着 )543 二叉树的直径560 和为k的子数组572 另一个树的子树394 字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为.

2020-07-20 17:26:26 276

原创 239 滑动窗口的最大值(单调队列)、279 完全平方数、283移动零到末尾、312戳气球 (动态规划)三个乘积最大,戳中间、 338比特位计数 动态规划、位运算、347前k个高频元素

239 滑动窗口的最大值 (单调队列)240 搜索二维矩阵279 完全平方数(动态规划)for(int i=1;i<=n;i++){for(int j=1;j*j<=i ;j++){283移动零到末尾 ,index:表示非0数的个数287寻找重复数 二分297二叉树的序列化和反序列化300最长上升子序列 动态规划 贪心(二分)309最佳买卖股票时期含冷冻期312戳气球 (动态规划)三个乘积最大,戳中间322零钱兑换(总和最大,不同硬币)337打家劫舍3338比特位计数 动.

2020-07-19 21:22:53 350

原创 lee必刷(六)160 相交链表、169 求众数、198 打家劫舍、200 岛屿个数、207 课程表(图 bfs、dfs)、208 实现trie(前缀树)、数组中的第k个最大元素、最大正方形、回文链表

160 相交链表169 求众数 (超过一半的数),一个count +±-198 打家劫舍 (三种情况)动态规划200 岛屿个数206 反转链表207 课程表208 实现trie(前缀树)215 数组中的第k个最大元素最大正方形翻转二叉树回文链表二叉树的最近公共祖先除自身以外数组乘积160 相交链表public class Solution { public ListNode getIntersectionNode(ListNode pHead1, ListNode p.

2020-07-19 17:43:06 137

原创 lee440. 字典序的第K小数字 (注重思路 字典前缀)

给定整数 n 和 k,找到 1 到 n 中字典序第 k 小的数字。注意:1 ≤ k ≤ n ≤ 109。示例 :输入:n: 13 k: 2输出:10解释:字典序的排列是 [1, 10, 11, 12, 13, 2, 3, 4, 5, 6, 7, 8, 9],所以第二小的数字是 10。class Solution { public int findKthNumber(int n, int k) { int cur = 1; k = k -

2020-07-19 15:46:03 154

原创 lee必刷题(五)114二叉树展开为链表、124二叉树最大路径和、139单词拆分、148 排序链表 归并排序、152 乘积最大子序列 动态规划 维护最大值、155 最小栈

lee102 二叉树层序遍历lee104 二叉树最大深度lee 105 从前序遍历和中序遍历序列构造二叉树114二叉树展开为链表买卖股票最佳时机124二叉树最大路径和128最长连续序列 滑动窗口136只出现一次的数字 位运算139单词拆分 动态规划141环形链表 快慢指针146 Lru缓存机制 hash链表结合148 排序链表 归并排序152 乘积最大子序列 动态规划 维护最大值、最小值155 最小栈 一个stack 先放数再放最小数114 二叉树转换为链表(没看懂)cl.

2020-07-18 15:41:47 198

原创 leetcode必刷题(四)lee75 颜色分类、lee76 最小覆盖字串、lee78 子集、lee79 单词搜索、lee84 柱状图中最大的矩形、lee85 最大矩形、lee96 不同的二叉搜索树、

lee75 颜色分类 patition 三个指针lee76 最小覆盖字串 滑动窗口lee78 子集 无重复数字 回溯lee79 单词搜索 回溯lee84 柱状图中最大的矩形 单调栈lee85 最大矩形 (用84的方法,在矩阵中)lee95 二叉树中序遍历lee96 不同的二叉搜索树 总结规律 动态规划lee98 验证二叉搜索树lee101 对称二叉树lee75 颜色分类同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色.

2020-07-18 13:52:15 886

原创 二分搜索 总结

我们还根据逻辑将「搜索区间」全都统一成了两端都闭,便于记忆,只要修改两处即可变化出三种写法:int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - l...

2020-07-12 15:49:30 87

原创 leetcode必刷100道题 (三),46 全排列、49 字母异位词分组、53 最大子序和、55 跳跃游戏、56 合并区间、62 不同路径、64 最小路径和、72 编辑距离70 爬楼梯、

46 全排列 flag [ ]、index == nums.length48 旋转图像 (未完成)49 字母异位词分组,53 最大子序和,dp想法,curNum变量替换,maxNum比对55 跳跃游戏 n=1;从后往前遍历数组,如果遇到的元素可以到达最后一行,则截断后边的元素。56 合并区间lee46 全排列7.3 重新写的class Solution { public List<List<Integer>> permute(int[] nums) {.

2020-07-04 17:50:39 3678

原创 列出所有区间 字节问题

插一个之前字节问的列出所有的区间:例:输入:[[1,3],[2,6],[8,10],[15,18]]输出:[8, 10][15, 18][1, 2][2, 3][3, 6]solution自己想的,建立优先队列,存有重复的,这样最小堆就可以往出取时建立区间,存入list中,没有重合的就直接存入list中。public class merge56byteDance { public static void main(String[] args) { int[][]

2020-07-04 16:45:36 105

原创 滑动窗口 labuladong,lee76 最小覆盖字串、lee567 字符串的排列、 lee438 找到字符串中所有字母异位词、 lee3 无重复字符的最长子串

lee76 最小覆盖子串给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字符的最小子串。示例:输入: S = “ADOBECODEBANC”, T = “ABC”输出: “BANC”说明:如果 S 中不存这样的子串,则返回空字符串 “”。如果 S 中存在这样的子串,我们保证它是唯一的答案。滑动窗口 labuladong想法注意:解决了,Integer自动拆箱这边 需要强制转化一下int,Integer会缓存频繁使用的数值,数值范围为-128到127,在此范围内直

2020-07-03 18:36:18 318

原创 模式匹配 面试题16.18,需要再想想

你有两个字符串,即pattern和value。 pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式。例如,字符串"catcatgocatgo"匹配模式"aabab"(其中"cat"是"a",“go"是"b”),该字符串也匹配像"a"、"ab"和"b"这样的模式。但需注意"a"和"b"不能同时表示相同的字符串。编写一个方法判断value字符串是否匹配pattern字符串。示例 1:输入: pattern = “abba”, value = “dogcatcatdog”输出: true

2020-06-22 17:34:30 145

原创 lee125 验证回文串 Character.isLetterOrDigit()、Character.toLowerCase()

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:Char输入: “race a car”输出: falsesolution注:判断是否是数字或字母:Character.isLetterOrDigit()转化为小写:Character.toLowerCase()class Solution {

2020-06-19 15:35:56 1199

原创 dns解析过程 结合pdf未完待续

当一个用户在地址栏输入www.taobao.com时,DNS解析有大致十个过程,如下:浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。同时域名被缓存的时间也可通过TTL属性来设置。如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。但是这种操作系统级别的

2020-06-19 12:31:03 292

原创 leetcode 1014最佳观光组合 (A[i] + A[j] + i - j)最大值 (动态规划)

题目给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。返回一对观光景点能取得的最高分。solution这道题首先想的是暴力,两个for循环,得出所有的组合找最大,超时。可以用动态规划的角度思考,但是不是那么复杂,已知题目要求 res = A[i] + A[j] + i - j (i < j) 的最

2020-06-17 19:41:47 224

原创 leetcode14. 最长公共前缀

14. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。solution当字符串数组长度为 0 时则公共前缀为空,直接返回令最长公共前缀 ans 的值为第一个字符串,进行初始化遍历后面的字符串,依次将其

2020-06-15 21:34:42 87

原创 leetcode 1300. 转变数组后最接近目标值的数组和 (星期一再写一遍)

给你一个整数数组 arr 和一个目标值 target ,请你返回一个整数 value ,使得将数组中所有大于 value 的值变成 value 后,数组的和最接近 target (最接近表示两者之差的绝对值最小)。如果有多种使得和最接近 target 的方案,请你返回这些整数中的最小值。请注意,答案不一定是 arr 中的数字。示例 1:输入:arr = [4,9,3], target = 10输出:3解释:当选择 value 为 3 时,数组会变成 [3, 3, 3],和为 9 ,这是最接近

2020-06-14 12:34:37 145

原创 leetcode 5423 找两个和为目标值且不重叠的子数组 (未万待续)

给你一个整数数组 arr 和一个整数值 target 。请你在 arr 中找 两个互不重叠的子数组 且它们的和都等于 target 。可能会有多种方案,请你返回满足要求的两个子数组长度和的 最小值 。请返回满足要求的最小长度和,如果无法找到这样的两个子数组,请返回 -1 。示例 1:输入:arr = [3,2,2,4,3], target = 3输出:2解释:只有两个子数组和为 3 ([3] 和 [3])。它们的长度和为 2 。示例 2:输入:arr = [7,3,4,7], target

2020-06-14 11:17:34 219

原创 leetcode 5422. 子矩形查询

请你实现一个类 SubrectangleQueries ,它的构造函数的参数是一个 rows x cols 的矩形(这里用整数矩阵表示),并支持以下两种操作:updateSubrectangle(int row1, int col1, int row2, int col2, int newValue)用 newValue 更新以 (row1,col1) 为左上角且以 (row2,col2) 为右下角的子矩形。2. getValue(int row, int col)返回矩形中坐标 (row,co

2020-06-14 10:32:48 158

原创 几种copyProperties工具类性能比较

最近的项目有用到PropertyUtils.copyProperties(info, daoInfo);便来总结一下。阿里发布了阿里巴巴代码规约插件,果断将它集成起来。我最喜欢使用的Apache BeanUtils.copyProperties()方法后面打了个大大的红叉,提示"避免使用Apache的BeanUtils进行属性的copy"。市面上的其他几种属性copy工具springframework的BeanUtilscglib的BeanCopierApache BeanUtils包的Pr

2020-06-12 20:34:31 1255

原创 玩转动态规划 lee1143 (6.6) 6.6 最长公共子序列(LCS)

参考官方思路 动态规划肯定有读者会问,为啥这个问题就是动态规划来解决呢?因为子序列类型的问题,穷举出所有可能的结果都不容易,而动态规划算法做的就是穷举 + 剪枝,它俩天生一对儿。所以可以说只要涉及子序列问题,十有八九都需要动态规划来解决,往这方面考虑就对了。下面就来手把手分析一下,这道题目如何用动态规划技巧解决。一、动态规划思路第一步,一定要明确 dp 数组的含义。对于两个字符串的动态规划...

2020-06-06 21:31:29 102

原创 动态规划之四键键盘 labuladong

先看题目如何在 N 次敲击按钮后得到最多的 A?我们穷举呗,每次有对于每次按 键,我们可以穷举四种可能,很明显就是⼀个动态规划问题。思路一这种思路会很容易理解,但是效率并不⾼,我们直接⾛流程:对于动态规划 问题,⾸先要明⽩有哪些「状态」,有哪些「选择」。 具体到这个问题,对于每次敲击按键,有哪些「选择」是很明显的:4 种, 就是题⽬中提到的四个按键,分别是 A 、 C-A 、 C-C 、 C-V ( Ctrl 简 写为 C )。接下来,思考⼀下对于这个问题有哪些「状态」?或者换句话说,我们需要

2020-06-06 20:50:38 298

原创 lee128最长连续序列 时间O(N)

lee128给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。首先想到是arrays排序后count O(n)需注意的是 ,有相同数 就跳过不算class Solution { public int longestConsecutive(int[] nums) { int n = nums.lengt

2020-06-06 12:53:54 104

原创 lee 238除自身以外数组的乘积

给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]提示:题目数据保证数组之中任意元素的全部前缀元素和后缀(甚至是整个数组)的乘积都在 32 位整数范围内。说明: 请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不

2020-06-04 10:31:50 80

原创 关于 kmp 算法理解

通过看labuladong算法讲解,自己总结了笔记:概述⽤ pat 表⽰模式串,⻓度为 M , txt 表⽰⽂本串, ⻓度为 N 。KMP 算法是在 txt 中查找⼦串 pat ,如果存在,返回这个 ⼦串的起始索引,否则返回 -1。先看暴力解法:会出现 txt 指针回退现象,KMP 算法花费空间减少时间消耗。KMP 算法永不回退 txt 的指针 i ,不⾛回头路(不会重复扫描 txt ),⽽是借助 dp 数组中储存的信息把 pat 移到正确的位置继续匹 配,时间复杂度只需 O(N),⽤空间换时间,

2020-05-31 11:13:39 146

原创 lee974 和可被 K 整除的子数组 (前缀和、 hashmap)

给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。示例:输入:A = [4,5,0,-2,-3,1], K = 5输出:7解释:有 7 个子数组满足其元素之和可被 K = 5 整除:[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]提示:1 <= A.length <= 30000-10000 <= A[i] <= 100002

2020-05-27 21:25:06 133

原创 lee 887 高楼扔鸡蛋(待研究)

题⽬是这样:你⾯前有⼀栋从 1 到 N 共 N 层的楼,然后给你 K 个鸡蛋 ( K ⾄少为 1)。现在确定这栋楼存在楼层 0 <= F <= N ,在这层楼将鸡 蛋扔下去,鸡蛋恰好没摔碎(⾼于 F 的楼层都会碎,低于 F 的楼层都不 会碎)。现在问你,最坏情况下,你⾄少要扔⼏次鸡蛋,才能确定这个楼层 F 呢?待研究添加链接描述...

2020-05-26 22:21:31 94

原创 lee动态规划 lee5 最长回文子串( 5.22修改 ) lee516 最长回文子序列(可不连续)

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”动态规划 思考第 1 步:定义状态dp[i][j] 表示子串 s[i, j] 是否为回文子串。第 2 步:思考状态转移方程这一步在做分类讨论(根据头尾字符...

2020-05-26 22:20:21 220

原创 lee287 寻找重复数 二分 快慢指针 环入口节点

给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字,但它可能不止重复出现一次。用二分查找二分法的思路是先猜一个数(有效范围 [left,

2020-05-26 10:33:55 210

原创 lee146 LRU缓存机制 自建双向链表 形成哈希链表

运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。你是否可以在 O(1) 时间复杂度

2020-05-25 22:21:24 106

原创 lee680 删除一个字符验证回文字符串

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: “aba”输出: True示例 2:输入: “abca”输出: True解释: 你可以删除c字符。注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。大神思路判断回文串显然是用双指针的,i从前往后遍历,j从后往前遍历。难点就是怎么去判断删除一个元素后的字符串是不是回文串,我提供一个思路:以"abdda"这个串为例,此时i指向’b’,j指向’d’,发现不对了。但是有一次删除的机会,

2020-05-19 10:13:08 775

原创 lee152 乘积最大子数组 lee52 最大子序和

给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。solution看到示例发现有负数,所以要开始考虑如果负数出现,最小值就变成最大值,最大值就变成最小值,所以要多记录一个最小值,不能光记录最大值。每次都要记录最大值i

2020-05-18 22:27:55 101

原创 test 测试我的链表程序

public class ListNodeTest { /* 测试我的链表程序 */ public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public static void main(String[] args) { int[] nums= {1,2,3,4,5,6

2020-05-16 13:17:56 131

原创 lee25. k个一组翻转链表,链表测试程序

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->1->4->5说明:你的算法只能使用常数的额外空间。你不能只是单纯的改变节点内部的值,而是需要实

2020-05-16 13:17:12 112

原创 面试题 输出1-10的六次方的质数

简单思路i 当被除数,j当除数,循环看 i % jpublic static void test2() { int i, j; for (i = 2; i <= 100; i++) { for (j = 2; j < i; j++) { if (i % j == 0) break; } if (j >= i)

2020-05-09 18:12:23 290

原创 华为笔试4.29 有疑问 所有排列组合、子序列字典序最小

问题一有重复字母的一个字符串,输出他的所有排列组合的个数输入:abc输出:6因为:abc acb bac bca cab cba类似leetcode添加链接描述第二题一个n长度的字符串去掉m个字符使字典序最小看说用单调栈,但还不会留下坑...

2020-04-29 21:25:06 233

原创 数据库常见19道题

lee175组合两个表SQL架构表1: Person±------------±--------+| 列名 | 类型 |±------------±--------+| PersonId | int || FirstName | varchar || LastName | varchar |±------------±-------...

2020-04-20 14:52:47 1742

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除