使用kotlin解决这个问题:217. 存在重复元素 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true 提示: 1 <= nums.length <= 105 -109 <= nums[i] <= 109
时间: 2023-07-02 10:14:43 浏览: 51
以下是使用Kotlin解决这个问题的代码:
```kotlin
fun containsDuplicate(nums: IntArray): Boolean {
val set = HashSet<Int>()
for (num in nums) {
if (set.contains(num)) {
return true
}
set.add(num)
}
return false
}
```
这个算法使用了哈希集合来记录每个元素是否出现过,时间复杂度为O(n),其中n是数组的长度。如果一个元素已经在集合中出现过,就说明存在重复元素,返回true,否则将该元素添加到集合中,继续遍历数组。如果遍历完整个数组仍没有找到重复元素,就返回false。
相关问题
kotlin 求数组的度:给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值。
可以使用 HashMap 来解决此问题。首先使用 HashMap 存储每个数字出现的次数以及第一次出现的索引位置。然后遍历 HashMap,找到出现次数最多的数字,并计算其第一次出现和最后一次出现的位置之差,即为数组的度。
示例代码:
```kotlin
fun findShortestSubArray(nums: IntArray): Int {
val map = mutableMapOf<Int, IntArray>() // 存储数字出现的次数和第一次出现的位置
var maxCount = 0 // 数组的度
var minLen = Int.MAX_VALUE // 最短的子数组长度
// 遍历数组,记录每个数字出现的次数和第一次出现的位置
for (i in nums.indices) {
val num = nums[i]
if (map.containsKey(num)) {
map[num]!![0]++
map[num]!![2] = i
} else {
map[num] = intArrayOf(1, i, i)
}
maxCount = maxOf(maxCount, map[num]!![0])
}
// 遍历 HashMap,找到出现次数最多的数字,并计算其第一次出现和最后一次出现的位置之差
for ((_, value) in map) {
if (value[0] == maxCount) {
minLen = minOf(minLen, value[2] - value[1] + 1)
}
}
return minLen
}
```
在上面的示例代码中,我们首先创建一个空的 HashMap,用于存储每个数字出现的次数和第一次出现的位置。然后遍历数组,记录每个数字出现的次数和第一次出现的位置,并更新数组的度。最后遍历 HashMap,找到出现次数最多的数字,并计算其第一次出现和最后一次出现的位置之差,即为数组的度。
使用kotlin解决这个问题:219. 存在重复元素 II 给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [1,2,3,1], k = 3 输出:true 示例 2: 输入:nums = [1,0,1,1], k = 1 输出:true 示例 3: 输入:nums = [1,2,3,1,2,3], k = 2 输出:false 提示: 1 <= nums.length <= 105 -109 <= nums[i] <= 109 0 <= k <= 105
以下是使用Kotlin解决这个问题的代码:
```kotlin
fun containsNearbyDuplicate(nums: IntArray, k: Int): Boolean {
val map = HashMap<Int, Int>()
for (i in nums.indices) {
val num = nums[i]
if (map.containsKey(num) && i - map[num]!! <= k) {
return true
}
map[num] = i
}
return false
}
```
这个算法使用了HashMap来记录每个元素最后一次出现的位置,以及该元素是否出现过。遍历数组时,如果当前元素已经在Map中出现过,并且当前位置和上次出现位置的距离不超过k,就说明存在重复元素,返回true。否则将该元素添加到Map中,并将其最后一次出现的位置更新为当前位置,继续遍历数组。如果遍历完整个数组仍没有找到符合条件的重复元素,就返回false。