蓝湖一面凉经
8.17 蓝湖一面
50 min,凉凉
自我介绍
手撕代码:
-
给你一副去掉大小王的扑克,扑克有52张,扑克只有黑色和红色,黑色和红色各26张。抽出n张,求黑色 - 红色的期望
答案:0
思路:模拟这个过程。黑色 - 红色 的范围是 [-m,m]。求出每个概率,再与值相乘即可。
离散期望求得方式:sum(x * p)
-
给你一个二维数组,求前K大的数
思路:快排变形。215. 数组中的第K个最大元素
时间:$O(N)$,但找pivot的时候需要引入随机化
public class test {
public static void main(String[] args) {
test test = new test();
int[] nums = {200,5,10,15,40,32,100};
int K = 2;
System.out.println(Arrays.toString(test.solution(nums, K)));
}
public int[] solution(int[] nums, int K) {
quickSort(nums, 0, nums.length - 1, K);
return Arrays.copyOfRange(nums, nums.length - K, nums.length);
}
private void quickSort(int[] nums, int left, int right, int K) {
int mid = patition(nums, left, right);
if (mid == nums.length - K) {
return;
} else if (mid > nums.length - K) {
quickSort(nums, 0, mid, K);
} else {
quickSort(nums, mid + 1, right, K);
}
}
private int patition(int[] nums, int left, int right) {
int p1 = left;
int p2 = right;
int pivot = nums[right];
while (p1 < p2) {
while (p1 < p2 && nums[p1] <= pivot) {
p1++;
}
while (p1 < p2 && nums[p2] >= pivot) {
p2--;
}
swap(nums, p1, p2);
}
swap(nums, p1, right);
return p1;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
八股文:
-
数据库,NoSQL会吗?(不会
-
简单介绍一下MySQL的InnoDB?
-
ACID?隔离性主要通过什么实现?
-
介绍一下ElasticSearch的倒排索引?
-
设计模式会吗?(不会
查看1道真题和解析
vivo公司福利 691人发布