码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【leetcode】【2022/9/12】1608. 特殊数组的特征值


    问题描述:

    • 给你一个非负整数数组 nums。如果存在一个数 x,使得 nums 中恰好有 x 个元素大于或者等于 x,那么就称 nums 是一个特殊数组,而 x 是该数组的特征值。
    • 如果数组 nums 是一个特殊数组,请返回它的特征值 x,否则返回 -1。
      • 可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是唯一的。

    核心思路:

    • 第一反应确实是排序 + 枚举。
      • 降序排序后,一次遍历,遍历过程中当前索引 i 如果是特征值,则满足 nums[i-1] >= i and nums[i] < i。【注意 i 从 1 开始】
    • 更好的方法是排序后进行二分找到合适的位置即可。【合适的位置同样满足上式】

    代码实现:

    • 模拟解法代码实现如下:
      class Solution
      {
      public:
          int specialArray(vector<int>& nums)
          {
              sort(nums.begin(), nums.end(), greater<int>());
              int m = nums.size();
              for(int i = 1; i <= m; ++i)
              {
                  // 满足 nums[i-1] >= i and nums[i] < i
                  if(nums[i-1] >= i and (i == m or nums[i] < i))
                      return i;
              }
              return -1;
          }
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
    • 二分解法代码实现如下:
      class Solution
      {
      public:
          int specialArray(vector<int>& nums)
          {
              sort(nums.begin(), nums.end());
              int n = nums.size(), left = 1, right = nums.size();
              while (left <= right)
              {
                  int mid = left + right >> 1;
                  if (nums[n - mid] >= mid)
                  {
                      if (mid == n || nums[n - mid - 1] < mid)
                          return mid;
                      else
                          left = mid + 1;
                  }
                  else
                      right = mid - 1;
              }
              return -1;
          }
      };
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
  • 相关阅读:
    IDEA插件Apifox,一键自动生成接口文档!
    20221108 今天的世界发生了什么
    数据结构——深度优先遍历(DFS)无向非连通图
    byte buddy字节码增强——输出方法执行时间
    SQL 递归思想
    docker 安装 redis
    好用的办公软件有哪些
    七夕节送什么礼物?推荐女生喜欢的礼物
    小型功率放大器的设计与制作——功率放大器的设计方法
    crontab配置定时根据名称杀进程
  • 原文地址:https://blog.csdn.net/weixin_44705592/article/details/126818195
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号