【LeetCode】面试题总结 消失的数字 最小k个数

 1.消失的数字

两种思路

1.先升序排序,再遍历并且让后一项与前一项比较

2.转化为数学问题求等差数列前n项和 (n的大小为数组的长度),将根据公式求得的应有的和数与数组中实际的和作差

【LeetCode】面试题总结 消失的数字 最小k个数_第1张图片


import java.util.*;
class Solution {
    public int missingNumber(int[] nums) {
        // 第一种
        /*Arrays.sort(nums);
        int len = nums.length;
        int val = 0;
        for(int i=0;i

2.最小K个数

优先级队列(默认情况是小根堆) + 比较器改变大小根堆 

第一种 :全部入优先级队列。

第二种 :先只进入k个数,再依次比较,小的加入,大的删除 这样队列中就一直只有k个元素,节省空间,时间。

总结

找第K大的元素  返回小根堆的根节点的值
找第K小的元素,返回大根堆的节点的值

 【LeetCode】面试题总结 消失的数字 最小k个数_第2张图片

 

import java.util.*;
class IntCmp implements Comparator{
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2-o1;
    }
}
class Solution {
    public int[] smallestK(int[] arr, int k) {
        
        /*  第一种 数组中的数全部入优先级队列
        int[] ret = new int[k];
        if(arr.length==0) return ret;

        PriorityQueue queue = new PriorityQueue<>(arr.length);

        for(int i = 0;i queue = new PriorityQueue<>(new IntCmp());

        for(int i=0;i

你可能感兴趣的:(LeetCode,leetcode,算法,数据结构,java)