日新刷题 - 2148. 元素计数

163 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

一 描述

2148. 元素计数 - 力扣(LeetCode)

给你一个整数数组 nums ,统计并返回在 nums 中同时至少具有一个严格较小元素和一个严格较大元素的元素数目。

 

示例 1:

输入:nums = [11,7,2,15]
输出:2
解释:元素 7 :严格较小元素是元素 2 ,严格较大元素是元素 11 。
元素 11 :严格较小元素是元素 7 ,严格较大元素是元素 15 。
总计有 2 个元素都满足在 nums 中同时存在一个严格较小元素和一个严格较大元素。

示例 2:

输入:nums = [-3,3,3,90]
输出:2
解释:元素 3 :严格较小元素是元素 -3 ,严格较大元素是元素 90 。
由于有两个元素的值为 3 ,总计有 2 个元素都满足在 nums 中同时存在一个严格较小元素和一个严格较大元素。

 

提示:

  • 1 <= nums.length <= 100
  • -105 <= nums[i] <= 105

二 分析

  1. 先对数组进行排序,找出最大值最小值:1.数组只有一个值,返回0
  2. 数组有多个相同的值,即最大值和最小值相等 返回0
  3. 找到第一个大于最小值的数字下标和最后一个小于最大值的数字下标
  4. end - start + 1

三 答案

class Solution {
    public int countElements(int[] nums) {
        if(nums.length == 1){
            return 0;
        }
        Arrays.sort(nums);
        int min = nums[0];
        int max = nums[nums.length - 1];
        if(min == max){
            return 0;
        }
        int start = 0;
        int end = 0;
        for(int i = 0;i < nums.length;i++){
            if(nums[i] > min){
                start = i;
                break;
            }
        }
        for(int i = nums.length-1;i > 0;i--){
            if(nums[i] < max){
                end = i;
                break;
            }
        } 
        return end-start+1;
    }
}

四 总结

思路还是很清晰的,排序的第一个和最后一个分别是数组中的最小值和最大值, 只要这个元素不等于最大值和最小值,他就存在较小值和较大值,他就是一个同时具有严格较小元素和严格较大元素的元素,然后统计该元素出现的次数

五 参考

O(n) 一次遍历 - 元素计数 - 力扣(LeetCode)