📌  相关文章
📜  检查是否存在(i,j)以使arr [i]!= arr [j]并且arr [arr [i]]等于arr [arr [j]](1)

📅  最后修改于: 2023-12-03 15:10:54.662000             🧑  作者: Mango

介绍题目

题目要求我们检查数组中是否存在一对元素 (i,j),满足条件 arr [i]! = arr [j] 并且 arr [arr [i]]等于arr [arr [j]]。也就是说,我们要找到两个不相等的数,它们在数组中的位置上的值相等。

解题思路

我们可以使用 HashMap 来解决这个问题。将数组中的元素作为键,而索引作为值,遍历数组,将键和值存储在 HashMap 中。在遍历的过程中,如果出现两个不相等的数,它们在 HashMap 中对应的值相等,那么就满足条件。

代码片段如下:

public boolean hasTwoDifferentValuesWithSameOccurrence(int[] arr) {
    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    
    for (int i = 0; i < arr.length; i++) {
        int num = arr[i];
        if (map.containsKey(num)) {
            // Found a pair of different values with same occurrence
            if (map.get(num) != i && arr[map.get(num)] == arr[i]) {
                return true;
            }
        } else {
            map.put(num, i);
        }
    }
    return false;
}

复杂度分析

时间复杂度:O(n),其中 n 是数组 arr 的长度。 空间复杂度:O(n),用到了 HashMap 来存储键值对。

因此,我们的解法时间复杂度和空间复杂度都是线性的,可以很好地满足题目的要求。