我和我
我和我
全部文章
面试必刷TOP101
题解(130)
归档
标签
去牛客网
登录
/
注册
我和我的博客
全部文章
/ 面试必刷TOP101
(共101篇)
题解 | #数组中出现次数超过一半的数字#TOP51
思路: 1.排序,但是时间复杂度O(n)达不到 2.以第一个数为基准点,开始计数times=1,如果他是众数,超过一半,那么times不可能为0。 网上称为候选人法。如果两个数不相等,顶多消除一个众数和一个非众数,剩下的还是有众数。或者消除两个非众数 public class Solution { ...
2022-07-16
0
301
题解 | #两数之和#TOP50
思路: 1.两数之和,hashmap存取,看代码 import java.util.*; public class Solution { /** * * @param numbers int整型一维数组 * @param target int整型 ...
2022-07-15
0
302
题解 | #表达式求值#TOP49
思路: 1.字符串拆成数组,用栈来保存每个运算的数,例如 a + b, 栈中先入 a,再入b,如果a / b,,栈中先入a,然后再取出a,入a/b。 2.先比如是 10 + 20 / 30,栈中存放10,然后再进行 + 20运算,遇到20,则判断符号位是+,则20入栈,然后遍历到30,发现前面是/,...
2022-07-15
0
379
题解 | #数据流中的中位数#TOP48
思路: 1.暴力破解法,每次插入的时候,都for循环遍历找到num位置该存放的位置,然后插入 2.堆。用大根堆存放中位数左边的数,小根堆存放右边的数。大根堆的最大数小于小根堆的最小数 3.第一个数,先放入大根堆,然后再取出最大的数放在小根堆里。第二个数,先放入小根堆里,然后取出最小的数,放在大根堆里...
2022-07-14
0
307
题解 | #寻找第K大#TOP47
思路: 1.快速排序的三路法 2.使得区间内 [left, lt) > value, [lt, gt) == value, [gt, right] < value 3.如果k-1 在 [lt, gt)之间,那就找到了第K大的数 4.主要是注意排序的规则 import java.util....
2022-07-14
0
270
题解 | #最小的K个数#TOP46
思路: 1.二分法,得到index,左边的数比index位置数小,右边比它大 2.直到index == k - 1, 选择 0 到 k -1 下标的数就是最小的k个数 import java.util.*; public class Solution { public ArrayList&...
2022-07-13
0
291
题解 | #滑动窗口的最大值#TOP45
思路: 1.使用队列,队头保持是最大的值的下标 2.每次遍历时先将队列中,从尾到头,比当前小的值移除。此时队列要么是空的,要么还有个比当前数大的值 3.对队头的下标进行边界约束,如果在i - size 前,即index <= i - size,就说明在窗口外了,我们移除队头的数据 4.每次队列...
2022-07-13
0
282
题解 | #有效括号序列#TOP44
思路: 1.利用栈,遇到 (、[、{ 就往栈中存入 )、]、} ,如果不是这三个字符,那么如果栈是空的,那当前字符就不能被匹配了。例如(、[、{、}、]、)、] ,最后一个导致不是有效序列了 2.如果栈不是空的,那么栈中弹出的元素必须要和当前遍历的相等。"([)]" 是不合法的,必须是"()[]{}...
2022-07-12
0
308
题解 | #包含min函数的栈#TOP43
思路: 1.两个栈,一个栈正常存放数据,另一个栈在每次存数据时,选择最小的数据存入。即和当前数据和栈顶数据比较,哪个小存哪个。 import java.util.Stack; public class Solution { Stack<Integer> stack...
2022-07-12
0
238
题解 | #用两个栈实现队列#TOP42
思路: 1.一个栈存值 2.取值的时候,如果第二个栈是空的,则把第一个栈的元素全部取出,放到栈2中,栈2取出元素不就符合先进先出了么 import java.util.Stack; public class Solution { Stack<Integer> stack1 = ...
2022-07-11
0
244
首页
上一页
1
2
3
4
5
6
7
8
9
10
下一页
末页