【练习】Day04(未完成版)

努力经营当下,直至未来明朗!


普通小孩也要热爱生活!

一、选择

  1. 下面代码运行结果是( )
public class Test{
    public int add(int a,int b){
        try {
            return a+b;
        }catch (Exception e) {
            System.out.println("catch语句块");
        }finally{
            System.out.println("finally语句块");
        }
        return 0;
    }
    public static void main(String argv[]){
        Test test =new Test();
        System.out.println("和是:"+test.add(9, 34));
    }
}

A: catch语句块 和是:43
B: 编译异常
C: finally语句块
和是:43
D: 和是:43
finally语句块

  1. 以下说法哪个是正确的【多选】( )

A: IOException在编译时会被发现
B: NullPointerEception在编译时不被发现
C: SQLException在编译时会被发现
D: FileNotFoundException在编译时会被发现


二、编程

1. 数组中的第K个最大元素

LeetCode215.数组中第K个最大元素
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

① 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
② 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。


2. 组合总数III

LeetCode216.组合III
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。


答案

1. 选择

  1. ① 在main函数中调用了add方法,先执行try,再执行catch,最后执行finally;但是此时try没有捕捉到任何异常,所以直接先执行try,然后执行finally。
    执行完add方法后才去执行main方法中接下来的代码,所以先输出finally内容,再输出main中的内容。

故:选C

  1. ① 必检异常(编译时异常):一定要进行异常声明
    ② 免检异常(运行时异常):RunTimeException以及其子类对应的异常,都称为运行时异常。比如:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException等。
    ③ IOException,FileNotFoundException,ClassNotFoundException,SQLException都属于编译时异常;
    NullPointerEception属于运行时异常

故:选ABCD

  1. ① 可以使用throw关键字在指定的方法中抛出指定的异常,例如throw new Exception("异常产生的原因")
    ② throw抛出异常,throws声明异常!

2. 编程

  1. 数组中第K个最大元素
    1)思路:
    ① 求数组排序后,第 k 大的元素,思路有很多:

A.可以先把数组降序排序,再取第 k-1 个元素(从0开始)
B.也可以把数组升序排序,再取第 数组长度-k 个元素

② 但是:注意本题是第K个最大元素,起类似于topK问题,使用堆排序
③ 我们可以创建一个小顶堆,从数组中取元素存放在堆中,这个过程可以维护堆的长度为k,那么,遍历完数组以后,堆顶元素即为求的第 k 个元素
④ 注意:针对的是所有元素,而不是不同的元素!(即:相同的n个元素也要排n个位!)

2)使用优先级队列PriorityQueue建立小根堆

3)代码

class Solution {
    public int findKthLargest(int[] nums, int k) {
        // 首先建立小根堆(大小只有k个元素)
        PriorityQueue<Integer> queue = new PriorityQueue<>();
        // 遍历元素,放入小根堆【注意大小限制】
        for (int x : nums) {
            // 将元素添加到堆中
            queue.add(x);
            // 维护堆的k个元素,超出则删除堆顶的最小元素
            // 我需要的是第k大,也就是尽量保留大的,从大的数的第k个就是需要的
            if(queue.size() > k) {
                queue.poll(); // 直接删除堆顶元素
            }
        }
        // 最后堆顶元素就是所求的元素
        return queue.peek();
    }
}

  1. 组合总数III
    深度搜索 + 回溯算法

1)思路:

2)代码:


11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值