在算法的世界里,每一道题目都是一次挑战与探索。今天,我们来深入剖析 LeetCode 上的一道有趣题目 ——1426. 数元素。
一、题目剖析给定一个整数数组arr,这里有着独特的计数规则:对于元素x,唯有当x + 1也在数组arr中时,这个x才能被记为 1 个数。特别要注意的是,若数组arr中有重复的数,每个重复的数都要单独依据此规则进行计算。
比如,示例 1 中输入arr = [1, 2, 3],输出为2。这是因为1对应的2在数组中,2对应的3也在数组中,所以1和2都满足计数条件,可被计算。而在示例 2 中,输入arr = [1, 1, 3, 3, 5, 5, 7, 7],输出是0。原因在于数组中不存在2、4、6、8,致使1、3、5、7均不符合计数条件。同时,题目还给出了约束:1 <= arr.length <= 1000,0 <= arr[i] <= 1000。
二、解题思路面对这道题,我们采用了一种高效的方法 —— 利用HashSet来解决。
首先,我们遍历整个数组arr,将数组中的每个元素逐一添加到HashSet中。这一步的目的是利用HashSet快速查找元素的特性,为后续的判断提供便利。
接着,我们再次遍历数组arr。对于数组中的每个元素arr[i],我们通过HashSet检查arr[i] + 1是否存在。如果存在,说明arr[i]满足题目要求的计数条件,此时我们将计数器result加 1。
三、代码实现package\_1426;importjava.util.HashSet;publicclassLeetCode1426{publicintcountElements(int\[] arr){varhashSet=newHashSet\<Integer>();varresult=0;for(vari=0; i < arr.length; i++) {hashSet.add(arr\[i]);}for(vari=0; i < arr.length; i++) {if(hashSet.contains(arr\[i] +1)) {result++;}}returnresult;}}
在这段代码中,我们首先创建了一个HashSet用于存储数组中的元素。然后,通过第一个for循环将数组元素全部添加到HashSet中。之后,利用第二个for循环遍历数组,借助HashSet的contains方法判断每个元素的后继元素是否存在,若存在则增加计数器result。
四、总结通过这道题,我们看到了合适的数据结构在解决算法问题时的强大作用。HashSet的快速查找特性使得我们能够高效地完成计数任务。希望大家在日常的算法学习中,不断积累经验,掌握更多巧妙的解题技巧。如果你对这道题有任何疑问,或者有更好的解法,欢迎在评论区留言分享!让我们一起在算法的海洋中畅游,不断提升自己。