- 博客(127)
- 收藏
- 关注
原创 算数表达式去括号(只包含加减)
来源原题来自腾讯WXG,比较两个算数表达式是否相等(只包含26个字母,只有加减),思路:我的想法为先去括号,再用一个Map去统计每个字母(a-z)正负相消后的的个数(字母前面为’+‘就加一,为’-'就减一)。比如,a-a+a-b最终就是a:1, b:-1, 最终比较每个字母的计数。递归去括号过程public static void main(String[] args) { St...
2020-05-06 13:03:08
858
转载 HashMap分析
HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断...
2020-05-05 16:39:17
232
原创 算数运算的后缀表达式和中缀表达式
后缀表达式求值后缀表达式又叫逆波兰表达式,其求值过程可以用到栈来辅助存储。例如要求值的后缀表达式为:1 2 3 + 4 * + 5 -遍历表达式,遇到数字时直接入栈,遇到操作符时,则将栈顶和次栈顶元素出栈与操作符进行运算,然后将结果压如栈中。当表达式都遍历完时,此时栈顶元素即为表达式的结果。后缀表达式的特点如下:1、后缀表达式的操作数与中缀表达式的操作数先后次序相同,而运算符的先后次序不...
2020-05-03 22:49:54
1758
原创 https加密与证书原理
对称加密在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。非对称加密涉及公钥、私钥、加密解密算法,它的加密解密过程如下:加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。注意,由公钥加密的内容,只能由私钥进行解密,也就是说,由公钥加密的内容,如果不知道私钥,是无法...
2020-04-27 01:00:44
308
原创 求比n小的一个数,使其各位数的乘积最大
贪心我们想要尽量把每一位变成9,然后每次都向前借一位来减,所以每次取max(solve(n / 10) * (n % 10), solve((n / 10 - 1) * 9); 若n比10小就返回n,若n为0就返回1;int solve(int n){ if(n == 0) return 1; else if(n < 10) return n; else return Math.m...
2020-04-24 02:08:54
325
1
原创 腾讯WXG面试题 生成随机数
问题描述工行有30万员工,现在要均匀抽出1万员工发奖品,提供一个16位的随机数生成器函数 rand16() 可供随意调用,请写一个函数 selectLuckyStaffs() 实现这个功能。如何用rand5()生成rand7()先看一个数据量不这么大的的类似题目,题目描述如下给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即,使用函数rand5()来实现函数rand...
2020-04-24 01:20:59
2084
3
原创 ArrayList与LinkedList的实现区别
ArrayList就是数组列表,底层是Object[] elementData,与LinkedList相比,它查询效率高,增删效率低,线程不安全,使用频率高。ArrayList可以通过构造方法在初始化的时候指定数组的大小。通过无参构造方法初始化是指定为一个空数组,所以数组容量为0,只有真正add时, 才分配默认DEFAULT_CAPACITY=10为初始容量。数组扩容1.5倍,会先把原数组的数...
2020-04-17 01:23:41
167
转载 蓄水池采样算法
问题描述分析采样问题经常会被遇到,比如:从 100000 份调查报告中抽取 1000 份进行统计。从一本很厚的电话簿中抽取 1000 人进行姓氏统计。从 Google 搜索 “Ken Thompson”,从中抽取 100 个结果查看哪些是今年的。这些都是很基本的采用问题。既然说到采样问题,最重要的就是做到公平,也就是保证每个元素被采样到的概率是相同的。所以可以想到要想实现这样的算法...
2020-04-12 04:44:51
203
原创 IDEA好用插件推荐记录
Background Image PlusCodeGlanceTranslationRainbow BracketsGrep ConsoleStatisticMarkdown NavigatorRestfulToolkitGsonFormatMyBatis Log PluginFree Mybatis pluginSequenceDiagram(时序图生成工具)...
2020-03-13 02:45:01
150
原创 Charles启动错误 Startup Error
错误Charles安装启动错误,Thebundled Java installation is broken.Please uninstall and reinstall Charles.解决把JDK环境变量配置好就行。特别是Path
2019-12-09 17:10:19
5491
1
原创 HDU 6180 Schedule
题目大意有n个任务,每个任务有一个起始时间和终止时间,一台机器一个时间最多处理一个任务,一台机器的运行时间定义为这台机器处理的任务中第一个任务开始的时间到最后一个任务结束的时间。问你最少需要多少台机器这里不求时间(省略)解析这种区间任务调度问题通常可行的一种实现方式是将左右端点看成独立的点来处理(用01来表示是左端点还是右端点),排一次序依次处理。遇到左端点,num++,然后更新a...
2019-11-04 03:39:12
184
原创 leetcode 337. 打家劫舍 III
337. 打家劫舍 III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1...
2019-10-30 03:00:53
283
原创 leetcode 213. 打家劫舍 II
213. 打家劫舍 II你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [2,3,2]...
2019-10-29 17:41:35
141
原创 leetcode 198. 打家劫舍
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1)...
2019-10-29 17:15:47
165
原创 hdu 1175 连连看(bfs或dfs)
Problem Description“连连看”相信很多人都玩过。没玩过也没关系,下面我给大家介绍一下游戏规则:在一个棋盘中,放了很多的棋子。如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子),而且线的转折次数不超过两次,那么这两个棋子就可以在棋盘上消去。不好意思,由于我以前没有玩过连连看,咨询了同学的意见,连线不能从外面绕过去的,但事实上这是错的。现在已经酿成大祸,就只能将错...
2019-10-28 00:55:18
163
原创 【字节专题】leetcode 69. x 的平方根
69. x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。class Solution { ...
2019-10-26 14:41:01
134
原创 【字节专题】leetcode 176. 第二高的薪水
176. 第二高的薪水编写一个 SQL 查询,获取 Employee 表中第二高的薪水(Salary) 。+----+--------+| Id | Salary |+----+--------+| 1 | 100 || 2 | 200 || 3 | 300 |+----+--------+例如上述 Employee 表,SQL查询应该返回 200 作为...
2019-10-20 00:16:55
135
原创 【字节专题】leetcode 146. LRU缓存机制
146. LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新...
2019-10-20 00:08:15
258
原创 【字节专题】leetcode 155. 最小栈
155. 最小栈设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStac...
2019-10-19 23:53:58
126
原创 满帮笔试题记录
下面关于B-树和B+树的叙述中,不正确的是______。A.B-树和B+树都是平衡的多分树B.B-树和B+树都可用于文件的索引结构C.B-树和B+树都能有效地支持随机检索D.B-树和B+树都能有效地支持顺序检索D[解析] 因为B+树所有的叶子结点中包含了全部关键字信息,以及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接,所以支持从根结点的随机检索和直接从叶子...
2019-10-19 23:49:00
967
转载 final,static,this,super 关键字总结
final,static,this,super 关键字总结final 关键字final关键字主要用在三个地方:变量、方法、类。对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法...
2019-10-17 10:34:39
168
原创 笔试0929
1. Java异常分类Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。Java异常类的层次结构如图所示。ErrorError是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Ja...
2019-10-09 02:22:00
817
原创 【字节专题】leetcode 354. 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。说明:不允许旋转信封。示例:输入: envelopes = [[5,4],[6,4],[...
2019-10-08 02:51:18
230
原创 【字节专题】leetcode 120. 三角形最小路径和
120. 三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。说明:如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你...
2019-10-08 01:45:34
139
原创 【字节专题】leetcode 53. 最大子序和
53. 最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。public int maxSubArray(i...
2019-10-08 01:33:18
105
原创 【字节专题】leetcode 221. 最大正方形
221. 最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4不需要额外空间 直接原地dp写得有点丑,没有大佬们的好看。第一个for遍历1~max_edge,也就是最长的边。第二三个for,判断matrix[i][j]=='1' &...
2019-10-08 01:22:06
268
原创 【字节专题】leetcode 122. 买卖股票的最佳时机 II
122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股...
2019-10-08 00:18:00
137
转载 leetcode 团灭股票系列问题
这 6 道股票买卖问题是有共性的,我们通过对第四题(限制最大交易次数为 k)的分析一道一道解决。因为第四题是一个最泛化的形式,其他的问题都是这个形式的简化。第一题是只进行一次交易,相当于 k = 1;第二题是不限交易次数,相当于 k = +infinity(正无穷);第三题是只进行 2 次交易,相当于 k = 2;剩下两道也是不限次数,但是加了交易「冷冻期」和「手续费」的额外条件,其实就是第二题...
2019-10-07 18:38:18
369
原创 【字节专场】leetcode 121. 买卖股票的最佳时机
121. 买卖股票的最佳时机给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6...
2019-10-07 17:29:33
127
原创 【字节专题】leetcode 103. 二叉树的锯齿形层次遍历
103. 二叉树的锯齿形层次遍历给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如下:[ [3], [20,9], [15,7]]...
2019-10-06 17:18:33
131
原创 【字节专题】leetcode 236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:...
2019-10-06 17:10:03
121
原创 【字节专题】leetcode 23. 合并K个排序链表
23. 合并K个排序链表合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6分而治之最快的做法//分治public ListNode mergeKLists(L...
2019-10-06 16:16:54
121
原创 【字节专题】leetcode 160. 相交链表
160. 相交链表编写一个程序,找到两个单链表相交的起始节点。快速做法消除长度差: 拼接两链表。public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) return null; ListNode pA = headA,...
2019-10-06 13:34:58
99
原创 【字节专场】leetcode 142. 环形链表 II
142. 环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to ...
2019-10-06 12:58:54
129
原创 【字节专题】leetcode 148. 排序链表
148. 排序链表在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5自底向上归并排序重点在于分别以1,2,4,8…的步长...
2019-10-05 17:21:16
126
原创 【字节专题】leetcode 2. 两数相加
2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -&g...
2019-10-05 15:44:33
145
原创 【字节专题】leetcode 92. 反转链表 II
92. 反转链表 II反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL递归// 返回值为新链表的头节点public ListNode reve...
2019-10-05 15:35:05
136
原创 【字节专题】leetcode 21. 合并两个有序链表
21. 合并两个有序链表将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4递归public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ...
2019-10-05 14:08:49
117
原创 【字节专题】leetcode 42. 接雨水
42. 接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6逻辑:当前高度小于...
2019-10-04 22:09:40
260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人