与对应负数同时存在的最大正整数
难度:
标签:
题目描述
代码结果
运行时间: 32 ms, 内存: 16.2 MB
/*
* 思路:
* 我们可以利用 Java Stream 的特性来简化代码。
* 首先将数组转换为一个 Set 集合,
* 然后利用 Stream 过滤出所有满足条件的正整数,
* 最后返回最大值。
*/
import java.util.Arrays;
import java.util.Set;
import java.util.stream.Collectors;
public class Solution {
public int findMaxK(int[] nums) {
Set<Integer> numSet = Arrays.stream(nums).boxed().collect(Collectors.toSet());
return Arrays.stream(nums)
.filter(num -> num > 0 && numSet.contains(-num))
.max()
.orElse(-1);
}
}
解释
方法:
解法首先创建了一个集合来存储数组中的所有元素,这有助于快速判断一个元素是否存在于数组中。然后,对数组进行从大到小的排序,这样可以优先检查较大的正整数。对于每一个正整数,检查其对应的负数是否也在集合中。一旦找到这样的正整数,立即返回它,因为它是满足条件的最大正整数。如果遍历结束也没有找到,则返回 -1。
时间复杂度:
O(n log n)
空间复杂度:
O(n)
代码细节讲解
🦆
为什么在解题中需要将数组转化为集合?集合与数组在查找效率上有什么区别?
▷🦆
解法中提到对数组进行降序排序后遍历,为什么选择降序而不是升序排序?
▷🦆
在解法中,如果数组中有多个相同的正整数k及其对应的负数-k,这种情况会影响算法的输出吗?
▷🦆
考虑到Python的set是无序的,直接迭代set而不是排序后的数组会怎样影响算法的结果和性能?
▷