📅  最后修改于: 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 来存储键值对。
因此,我们的解法时间复杂度和空间复杂度都是线性的,可以很好地满足题目的要求。