我和我
我和我
全部文章
分类
面试必刷TOP101(101)
题解(130)
归档
标签
去牛客网
登录
/
注册
我和我的博客
TA的专栏
30篇文章
1人订阅
面试必刷TOP101
30篇文章
515人学习
全部文章
(共232篇)
题解 | #数组中只出现一次的两个数字#TOP52
思路: 1.哈希 2.位运算,相同的数异或结果为0,如果只有一个数出现奇数次,其他都偶数次,那么数组每个数异或结果就是那个数。只不过题目这里是两个数的异或结果。因为不同的数,异或结果为1,所以找出异或后数字中第一位异或结果为1的位数。以此就可以区分数组为两半。将两半不断异或就得到结果了 import...
2022-07-16
0
274
题解 | #数组中出现次数超过一半的数字#TOP51
思路: 1.排序,但是时间复杂度O(n)达不到 2.以第一个数为基准点,开始计数times=1,如果他是众数,超过一半,那么times不可能为0。 网上称为候选人法。如果两个数不相等,顶多消除一个众数和一个非众数,剩下的还是有众数。或者消除两个非众数 public class Solution { ...
2022-07-16
0
289
题解 | #两数之和#TOP50
思路: 1.两数之和,hashmap存取,看代码 import java.util.*; public class Solution { /** * * @param numbers int整型一维数组 * @param target int整型 ...
2022-07-15
0
290
题解 | #表达式求值#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
365
题解 | #数据流中的中位数#TOP48
思路: 1.暴力破解法,每次插入的时候,都for循环遍历找到num位置该存放的位置,然后插入 2.堆。用大根堆存放中位数左边的数,小根堆存放右边的数。大根堆的最大数小于小根堆的最小数 3.第一个数,先放入大根堆,然后再取出最大的数放在小根堆里。第二个数,先放入小根堆里,然后取出最小的数,放在大根堆里...
2022-07-14
0
283
题解 | #寻找第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
262
题解 | #最小的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
283
题解 | #滑动窗口的最大值#TOP45
思路: 1.使用队列,队头保持是最大的值的下标 2.每次遍历时先将队列中,从尾到头,比当前小的值移除。此时队列要么是空的,要么还有个比当前数大的值 3.对队头的下标进行边界约束,如果在i - size 前,即index <= i - size,就说明在窗口外了,我们移除队头的数据 4.每次队列...
2022-07-13
0
266
题解 | #有效括号序列#TOP44
思路: 1.利用栈,遇到 (、[、{ 就往栈中存入 )、]、} ,如果不是这三个字符,那么如果栈是空的,那当前字符就不能被匹配了。例如(、[、{、}、]、)、] ,最后一个导致不是有效序列了 2.如果栈不是空的,那么栈中弹出的元素必须要和当前遍历的相等。"([)]" 是不合法的,必须是"()[]{}...
2022-07-12
0
279
题解 | #包含min函数的栈#TOP43
思路: 1.两个栈,一个栈正常存放数据,另一个栈在每次存数据时,选择最小的数据存入。即和当前数据和栈顶数据比较,哪个小存哪个。 import java.util.Stack; public class Solution { Stack<Integer> stack...
2022-07-12
0
233
首页
上一页
1
2
3
4
5
6
7
8
9
10
下一页
末页