LeetCode 1426 题:数元素解题全解析

LeetCode 1426 题:数元素解题全解析

在算法的世界里,每一道题目都是一次挑战与探索。今天,我们来深入剖析 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。原因在于数组中不存在 2468,致使 1357 均不符合计数条件。同时,题目还给出了约束:1 <= arr.length <= 10000 <= arr[i] <= 1000

二、解题思路

面对这道题,我们采用了一种高效的方法 —— 利用 HashSet 来解决。

首先,我们遍历整个数组 arr,将数组中的每个元素逐一添加到 HashSet 中。这一步的目的是利用 HashSet 快速查找元素的特性,为后续的判断提供便利。

接着,我们再次遍历数组 arr。对于数组中的每个元素 arr[i],我们通过 HashSet 检查 arr[i] + 1 是否存在。如果存在,说明 arr[i] 满足题目要求的计数条件,此时我们将计数器 result 加 1。

三、代码实现

package \_1426;

import java.util.HashSet;

public class LeetCode1426 {

&#x20;   public int countElements(int\[] arr) {

&#x20;       var hashSet = new HashSet\<Integer>();

&#x20;       var result = 0;

&#x20;       for (var i = 0; i < arr.length; i++) {

&#x20;           hashSet.add(arr\[i]);

&#x20;       }

&#x20;       for (var i = 0; i < arr.length; i++) {

&#x20;           if (hashSet.contains(arr\[i] + 1)) {

&#x20;               result++;

&#x20;           }

&#x20;       }

&#x20;       return result;

&#x20;   }

}

在这段代码中,我们首先创建了一个 HashSet 用于存储数组中的元素。然后,通过第一个 for 循环将数组元素全部添加到 HashSet 中。之后,利用第二个 for 循环遍历数组,借助 HashSet 的 contains 方法判断每个元素的后继元素是否存在,若存在则增加计数器 result

四、总结

通过这道题,我们看到了合适的数据结构在解决算法问题时的强大作用。HashSet 的快速查找特性使得我们能够高效地完成计数任务。希望大家在日常的算法学习中,不断积累经验,掌握更多巧妙的解题技巧。如果你对这道题有任何疑问,或者有更好的解法,欢迎在评论区留言分享!让我们一起在算法的海洋中畅游,不断提升自己。

上一篇:window下用vim


下一篇:Python实用技巧:如何使用Python进行网络请求和API交互