给你一个整数数组 nums
,数组由 不同正整数 组成,请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字,如果不存在这样的数字,返回 -1
。
返回所选整数。
示例 1:
输入:nums = [3,2,1,4] 输出:2 解释:在这个示例中,最小值是 1 ,最大值是 4 。因此,2 或 3 都是有效答案。
示例 2:
输入:nums = [1,2] 输出:-1 解释:由于不存在既不是最大值也不是最小值的数字,我们无法选出满足题目给定条件的数字。因此,不存在答案,返回 -1 。
示例 3:
输入:nums = [2,1,3] 输出:2 解释:2 既不是最小值,也不是最大值,这个示例只有这一个有效答案。
提示:
1 <= nums.length <= 100
1 <= nums[i] <= 100
nums
中的所有数字互不相同
我们可以先找到数组中的最小值和最大值,分别记为
时间复杂度
class Solution:
def findNonMinOrMax(self, nums: List[int]) -> int:
mi, mx = min(nums), max(nums)
return next((x for x in nums if x != mi and x != mx), -1)
class Solution {
public int findNonMinOrMax(int[] nums) {
int mi = 100, mx = 0;
for (int x : nums) {
mi = Math.min(mi, x);
mx = Math.max(mx, x);
}
for (int x : nums) {
if (x != mi && x != mx) {
return x;
}
}
return -1;
}
}
class Solution {
public:
int findNonMinOrMax(vector<int>& nums) {
auto [mi, mx] = minmax_element(nums.begin(), nums.end());
for (int x : nums) {
if (x != *mi && x != *mx) {
return x;
}
}
return -1;
}
};
func findNonMinOrMax(nums []int) int {
mi, mx := slices.Min(nums), slices.Max(nums)
for _, x := range nums {
if x != mi && x != mx {
return x
}
}
return -1
}
impl Solution {
pub fn find_non_min_or_max(nums: Vec<i32>) -> i32 {
let mut mi = 100;
let mut mx = 0;
for &ele in nums.iter() {
if ele < mi {
mi = ele;
}
if ele > mx {
mx = ele;
}
}
for &ele in nums.iter() {
if ele != mi && ele != mx {
return ele;
}
}
-1
}
}
class Solution:
def findNonMinOrMax(self, nums: List[int]) -> int:
mi, mx = min(nums), max(nums)
for x in nums:
if x != mi and x != mx:
return x
return -1