【练习】Day06

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


普通小孩也要热爱生活!

一、选择

  1. 散列技术中的冲突是指( )

A. 两个元素具有相同的序号
B. 两个元素的键值不同,而其他属性相同
C. 数据元素过多
D 不同键值的元素对应于相同的存储地址

  1. 以下哪些是lambda表达式的重要特征【多选】( )

A. 不需要声明参数类型,编译器可以统一识别参数值。
B. 一个参数无需定义圆括号,但多个参数需要定义圆括号
C. 如果主体包含了一个语句,就不需要使用大括号
D. 如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定表达式返回了一个数值


二、编程

最小时间差

LeetCode539.最小时间差
给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示


答案

1. 选择

  1. 对于两个数据元素的关键字,他们的值不同,但是不同关键字通过相同哈希哈数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞

即:哈希冲突/碰撞:不同的关键字通过相同哈希函数计算出相同的哈希地址/存储地址。

故:选D

  1. ① lambda允许通过表达式来代替接口功能。
    ② lambda基本语法: (parameters参数) -> expression表达式 或 (parameters参数) ->{ statements;语句块 }
    ③ 参数的类型可以省略(如果省略就全部省略),如果参数只有一个可以不使用()
    ④ 如果是只有一条语句就可以省略{};如果是return,则可以省略return直接写return之后的内容

参考Lambda

故:选ABCD

  1. 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:

① 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值;
② 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值;
③ 它的左右子树也分别为二叉搜索树

小结:二叉搜索树/二叉排序树:空树 or (左子树<根结点&&右子树>根结点)

  1. ① 枚举类型是一种特殊的数据类型,它是一种类(class)类型却又比类类型多了些特殊的约束。
    ② 枚举类型不属于基本数据类型。

2. 编程

最小时间差
1)思路:

关键是00:00的处理!
② 将时间转换为统一单位(min),即:小时*60+分钟
③ 然后将转换好的分钟存入数组中并排序,这样通过两两相邻的比较就可以获取目前的最小分钟数
④ 注意到题目对 “23:59” 和 "00:00"的时间差记为 1,而我们计算的结果为 23*60+59-0 ,不符合要求。【其实就是最小、最大之间也要计算
⑤ 所以,还需要把最小的时间和最大的时间也对比。我们 只需要将一天的分钟数24*60 减去最大时间和最小时间的差即可。即最后还需要比较 24*60+最小时间-最大时间

2)注意:

① 最大、最小时间的比较单独处理!
② 注意字符串转为整型方法!Integer.valueOf("");
③ 注意获取子串的subString的参数是前闭后开
④ 注意取最小值的方法Math.min(int a,int b);

3)代码:

import java.util.Arrays;
import java.util.List;

class Solution {
    public int findMinDifference(List<String> timePoints) {
        // 首先定义一个最小值,用来表示当前的最小时间差
        // 可以去整型最大值,后续就可以直接进行比较厚替换
        int min = Integer.MAX_VALUE;

        // 定义一个数组,用来存储转换后的分钟数,长度是时间个数
        int[] minutes = new int[timePoints.size()];

        // 开始进行分钟的转换,并存入数组
        for (int i = 0; i < timePoints.size(); i++) {
            // 注意:前闭后开
            // get(i)是获取链表的i下标位置的String
            minutes[i] = Integer.valueOf(timePoints.get(i).substring(0,2))*60
                    + Integer.valueOf(timePoints.get(i).substring(3,5));
        }

        // 存入数组后进行升序排列
        Arrays.sort(minutes);

        // 遍历数组两两相邻比较,并计算出当前最小值
        for (int i = 0; i < minutes.length-1; i++) {
            min = Math.min(min,minutes[i+1]-minutes[i]);
        }

        // 单独处理最大最小,并与min比较确定最终min值
        return Math.min(min,24*60-(minutes[minutes.length-1]-minutes[0]));
    }
}

yy

  • 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、付费专栏及课程。

余额充值