码农知识堂 - 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

    后话

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

  • 相关阅读:
    Redis 数据类型 list 以及使用场景
    【自动注入】@Autowired、@Resource的区别是什么
    猿创征文|HCIE-Security Day57:URL过滤技术
    带你入门HTML+CSS网页设计,编写网页代码的思路
    组合数求法、卡特兰数
    【CUDA】算子编译错误ATen/ATen.h: No such file or directory
    redis 问题解决 2
    C++ 迷宫问题
    【操作系统】线程&进程相关
    java.lang.UnsatisfiedLinkError: dlopen failed: library “libsqlite.so“ not found
  • 原文地址:https://blog.csdn.net/weixin_54891898/article/details/126815275
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号