题目: 从数组中移除最大值和最小值
来自智得网
方法一:排序法
首先,对给定的数组进行排序,然后去除排序后的数组中的第一个和最后一个元素,即最小值和最大值,得到新的数组。
#include <vector>
#include <algorithm>
std::vector<int> removeMinMax(std::vector<int>& nums) {
std::sort(nums.begin(), nums.end());
nums.erase(nums.begin());
nums.pop_back();
return nums;
}
import java.util.Arrays;
public int[] removeMinMax(int[] nums) {
Arrays.sort(nums);
return Arrays.copyOfRange(nums, 1, nums.length - 1);
}
import "sort"
func removeMinMax(nums []int) []int {
sort.Ints(nums)
return nums[1 : len(nums)-1]
}
def removeMinMax(nums):
nums.sort()
return nums[1:-1]
function removeMinMax(nums) {
nums.sort((a, b) => a - b);
nums.shift();
nums.pop();
return nums;
}
方法二:线性扫描法
在遍历数组的过程中,记录当前数组的最小值和最大值,然后创建一个新的数组,将不是最小值和最大值的元素添加到新数组中。
#include <vector>
#include <algorithm>
std::vector<int> removeMinMax(std::vector<int>& nums) {
int minVal = INT_MAX;
int maxVal = INT_MIN;
for (int num : nums) {
minVal = std::min(minVal, num);
maxVal = std::max(maxVal, num);
}
std::vector<int> result;
for (int num : nums) {
if (num != minVal && num != maxVal) {
result.push_back(num);
}
}
return result;
}
import java.util.ArrayList;
import java.util.List;
public int[] removeMinMax(int[] nums) {
int minVal = Integer.MAX_VALUE;
int maxVal = Integer.MIN_VALUE;
for (int num : nums) {
minVal = Math.min(minVal, num);
maxVal = Math.max(maxVal, num);
}
List<Integer> result = new ArrayList<>();
for (int num : nums) {
if (num != minVal && num != maxVal) {
result.add(num);
}
}
return result.stream().mapToInt(Integer::intValue).toArray();
}
func removeMinMax(nums []int) []int {
minVal := int(^uint(0) >> 1)
maxVal := -minVal - 1
for _, num := range nums {
if num < minVal {
minVal = num
}
if num > maxVal {
maxVal = num
}
}
var result []int
for _, num := range nums {
if num != minVal && num != maxVal {
result = append(result, num)
}
}
return result
}
def removeMinMax(nums):
minVal = float('inf')
maxVal = float('-inf')
for num in nums:
minVal = min(minVal, num)
maxVal = max(maxVal, num)
result = []
for num in nums:
if num != minVal and num != maxVal:
result.append(num)
return result
function removeMinMax(nums) {
let minVal = Number.POSITIVE_INFINITY;
let maxVal = Number.NEGATIVE_INFINITY;
for (let num of nums) {
minVal = Math.min(minVal, num);
maxVal = Math.max(maxVal, num);
}
let result = [];
for (let num of nums) {
if (num !== minVal && num !== maxVal) {
result.push(num);
}
}
return result;
}
方法三:双指针法
使用两个指针,一个指向数组的最小值,另一个指向数组的最大值。遍历数组,将不是最小值和最大值的元素移动到数组的前部分。
#include <vector>
#include <algorithm>
std::vector<int> removeMinMax(std::vector<int>& nums) {
int minVal = INT_MAX;
int maxVal = INT_MIN;
for (int num : nums) {
minVal = std::min(minVal, num);
maxVal = std::max(maxVal, num);
}
nums.erase(std::remove(nums.begin(), nums.end(), minVal), nums.end());
nums.erase(std::remove(nums.begin(), nums.end(), maxVal), nums.end());
return nums;
}
import java.util.ArrayList;
import java.util.List;
public int[] removeMinMax(int[] nums) {
int minVal = Integer.MAX_VALUE;
int maxVal = Integer.MIN_VALUE;
for (int num : nums) {
minVal = Math.min(minVal, num);
maxVal = Math.max(maxVal, num);
}
List<Integer> list = new ArrayList<>();
for (int num : nums) {
if (num != minVal && num != maxVal) {
list.add(num);
}
}
int[] result = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
result[i] = list.get(i);
}
return result;
}
func removeMinMax(nums []int) []int {
minVal := int(^uint(0) >> 1)
maxVal := -minVal - 1
for _, num := range nums {
if num < minVal {
minVal = num
}
if num > maxVal {
maxVal = num
}
}
var result []int
for _, num := range nums {
if num != minVal && num != maxVal {
result = append(result, num)
}
}
return result
}
def removeMinMax(nums):
minVal = float('inf')
maxVal = float('-inf')
for num in nums:
minVal = min(minVal, num)
maxVal = max(maxVal, num)
nums = [num for num in nums if num != minVal and num != maxVal]
return nums
function removeMinMax(nums) {
let minVal = Number.POSITIVE_INFINITY;
let maxVal = Number.NEGATIVE_INFINITY;
for (let num of nums) {
minVal = Math.min(minVal, num);
maxVal = Math.max(maxVal, num);
}
nums = nums.filter(num => num !== minVal && num !== maxVal);
return nums;
}