刷算法题记录

第一题、连续数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

class Solution{
    public int findMaxKength(int[] nums){
        int maxLength = 0;
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        int counter = 0;
        map.put(counter,-1);
        int n = nums.length;
        for(int i = 0;i < n;i++){
            if(nums[i] == 0){
                counter--;
            }else{
                counter++;
            }
            if(map.containsKey(counter)){
                int prevIndex = map.get(counter);
                maxLength = Math.max(maxLength, i - prevIndex);
            }else{
                map.put(counter,i);
            }
        }
        return maxLength;
    }
}

第二题 最小K个数 面试题 17.14. 最小K个数 - 力扣(LeetCode) 

class Solution{
    public int[] smallestK(int[] arr, int k){
        int[] vec = new int[k];
        if(k == 0){return vec;} //排除0的情况
        PriorityQueue<Integer> queue = new PriorityQueue<Integer>(
        new Comparator<Integer>(){
        public int compare(Integer num1, Integer num2){
            return num2 - num1;
            }
        });//使用匿名内部类实现了Comparator接口,重写了compare方法来定义元素的比较规则
//创建了降序的优先队列
        for(int i = 0;i < k; ++i){
        queue.offer(arr[i]);
        }
        for(int i = k;i < arr.length; ++i){
            if(queue.peek() > arr[i]){//判断元素优先队列的首元素和第i+1个元素大小
                queue.poll();// 如果比首元素大,则删除首元素 将第i+1个元素加入优先队列
                queue.offer(arr[i]);
            }
        }
        for(int i = 0; i < k; ++i){
            vec[i] = queue.poll();}
    return vec;

    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值