码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 1608 特殊数组的特征值——Leetcode 天天刷(2022.9.12)【排序】


    1608 特殊数组的特征值——Leetcode 天天刷(2022.9.12)【排序】

    文章目录

    • 1608 特殊数组的特征值——Leetcode 天天刷(2022.9.12)【排序】
      • 前言
      • 题目描述
        • 本地输入输出
          • 输入
          • 输出
          • 输入示例
          • 输出示例
        • 数据范围
      • 题解——排序
        • 算法分析
        • Code(C++)
      • 后话

    前言

    刚做了今天的每日一题,不愧是绿色,题目确实很绿色,可以直接暴力,但是用下排序会快上不少,有不少大佬用上了二分优化,但是个人觉得没太大必要。

    题目描述

    题目传送门

    有兴趣的可以试试。

    就是给定一个数组,数字都是非负整数。判断是否存在一个数字 x,如果数组中有 x 个整数不小于 x,则 x 就是该数组的 特征值,返回特征值,如果不存在,则返回 -1。

    本地输入输出

    输入

    多组输入,每组的第一行输入一个整数n,第二行输入n个整数。

    输出

    每组输出单行,每行一个数字,表示特征值。

    输入示例
    2
    3 5
    
    
    2
    0 0
    
    5
    0 4 3 0 4
    
    
    5
    3 6 7 7 0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    输出示例
    2
    -1
    3
    -1
    
    • 1
    • 2
    • 3
    • 4

    数据范围

    • 1 <= nums.length <= 100
    • 0 <= nums[i] <= 1000

    题解——排序

    我们可以将数组先进行升序排序,从数组的尺寸开始向下判断,我们记枚举的数字是num,num 首先需要比数组当前值小于等于,如果当前不是数组的首位,就需要与前一个值比较,num需要大于下一个值。

    这里由于数组尺寸一定大于0,所以答案一定不会是0。

    算法分析

    时间复杂度: O ( log ⁡ n ) O(\log n) O(logn), 主要来自排序。

    空间复杂度: O ( log ⁡ n ) O(\log n) O(logn), 还是在排序,使用排序函数存在 **归并排序**时会使用额外的空间。

    在这里插入图片描述

    Code(C++)

    #include
    
    using namespace std;
    
    class Solution 
    {
    public:
    	// 排序+单次遍历
    	// 将数组按升序排序后,从数组的元素数量大小开始向下判断
    	// 选定的数值num从n,就是数组尺寸开始,每次数组指针向后移动都需要-1
    	// num首先需要比数组当前值小或者等,若当前值不为数组首位,则还需要与前一个值大
    	// 否则向后移动
        int specialArray(vector<int>& nums) 
    	{
    		sort(nums.begin(), nums.end());			// 排序,结果为升序
    		int n = nums.size();
    		int ans = -1;		// 初始化为-1
    		int num = n;
    		// 遍历数组
    		for(int i = 0; i < n && num; ++i, --num)
    		{
    			// 答案条件
    			if((num <= nums[i]) && (!i || (i && num > nums[i - 1])))
    			{
    				ans = num;
    				break;
    			}
    		}
    		return ans;
        }
    };
    
    int main()
    {
    	int n;
    	Solution* sol = new Solution();
    	while(scanf("%d", &n))
    	{
    		vector<int> nums(n);
    		for(int i = 0; i < n; ++i)
    		{
    			scanf("%d", &nums[i]);
    		}
    		printf("%d\n", sol->specialArray(nums));
    	}
    
    	delete sol;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    后话

    要准备国赛了,后面有时间再更新最近打的一些周赛的题目。

  • 相关阅读:
    Cypress 前端 E2E 测试——手把手入门教程
    科目三:超车
    SpringMVC(2)——请求与响应
    webpack、vue.config.js
    SpringBoot-插件化以及springboot扩展接口
    打印不同商品价格(使用父类作为返回值实现打印不同类型商品价格)
    【JVM笔记】intern () 的使用与new String () 的细节
    【深度学习】实验05 构造神经网络示例
    Matlab对多个输入信号进行数值排序提取特定值
    使用OpenCVSharp利用PictrueBox对接摄像头获取视频图像
  • 原文地址:https://blog.csdn.net/weixin_54891898/article/details/126815275
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    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号