个整数数组 nums ,数组由 不同正整数 组成,请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字,如果不存在这样的数字,返回 -1 。 返回所选整数。1 <= nums.length <= 100 1 <= nums[i] <= 100 nums 中的所有数字互不相同 请给出Java版代码带注释
时间: 2024-03-24 07:40:41 浏览: 116
python 实现给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)
5星 · 资源好评率100%
好的,以下是Java版代码带注释:
```java
public int findMiddleNumber(int[] nums) {
// 若数组为空或长度小于等于2,则不存在符合条件的数字,返回 -1
if (nums == null || nums.length <= 2) {
return -1;
}
// 初始化最小值、次小值和最大值
int min = Integer.MAX_VALUE, max = Integer.MIN_VALUE;
// 初始化中间值为数组的第一个数
int middle = nums[0];
// 遍历数组,更新最小值、次小值、最大值和中间值
for (int num : nums) {
if (num < min) {
// 更新最小值,并将次小值赋值为原最小值
max = min;
min = num;
} else if (num > max) {
// 更新最大值
max = num;
} else if (num != min && num != max) {
// 如果当前数不是最小值和最大值,则将其赋值为中间值
middle = num;
}
}
// 如果中间值不等于最小值和最大值,则返回中间值,否则返回 -1
return middle != min && middle != max ? middle : -1;
}
```
这里我们用了三个变量来保存当前数组中的最小值、次小值和最大值,遍历数组时更新这三个变量的值。最后返回次小值即可。如果不存在这样的数字,则返回 -1。由于题目中给定了数组长度最大为100,因此时间复杂度为O(n)的解法是可行的。
阅读全文