前言:该篇用于记录自看。曾回看昨天的做题代码,竟然会觉得陌生,这竟然是我写的,细细读了一下,原来我当时是这么想的。因此我觉得记代码没有实际用处,重点是领悟了思想,这样子代码就在心中,随时可以再写出来。因此我的笔记不记录代码,只记录一些关键思想突破点。
第一题:数字统计
对于数x
x%10得到个位
x/10 得到去掉个位,剩下的数
再综合上递归思想
第二题:两个数组的交集
第一次解题:
第一次做的时候通过暴力解法套两个循环解出来了
优化:
运用哈希表的知识
复习:哈希表的核心思想是通过将关键字映射到表中一个位置来快速定位记录,以加快查找的速度。具体来说,哈希表利用哈希函数将关键字映射到一个地址,这个地址通常称为哈希地址或哈希值。通过这个地址,可以直接访问到所需的数据,而不需要进行大量的比较操作,从而实现常数时间复杂度的平均查找时间。
解题思想:
那在这道题中,因为nums1、2的范围[1,1000],直接用数组的下标映射。
细节1:
boolean[] a = new boolean[1020]; 和 Boolean[] a = new Boolean[1020]的区别:
boolean[] 默认初始化为 false。Boolean[] 默认初始化为 null。
使用 boolean[] 时,考虑存储大量基本布尔值,且希望使用内存更加高效。
使用 Boolean[] 时,需要考虑可能存储 null 值或使用 Boolean 的其他特性。
因此这道题要用boolean,避免空指针异常。
细节2:
if语句里若不小心写成= 赋值,也不会报错。代码跑不过时,可检查这里。
第三题:点击消除
【相邻两个相同的字母】->用栈解决;不用到栈思想的方法基本都会超时;
初始解法:我的代码是用到Stack类直接初始化一个栈;
优化:用StringBuilder模拟一个栈,利用了StringBuilder的可变性,增减元素时,长度也会相应改变。具体实现:append增加字符模拟入栈,deleteCharAt模拟出栈。