特殊数组的特征值-c语言快速排序
2023-09-14 09:06:53 时间
特殊数组的特征值-c语言快速排序
给你一个非负整数数组 nums 。如果存在一个数 x ,使得 nums 中恰好有 x 个元素 大于或者等于 x ,那么就称 nums 是一个 特殊数组 ,而 x 是该数组的 特征值 。
注意: x 不必 是 nums 的中的元素。
如果数组 nums 是一个 特殊数组 ,请返回它的特征值 x 。否则,返回 -1 。可以证明的是,如果 nums 是特殊数组,那么其特征值 x 是 唯一的 。
示例 1:
输入:nums = [3,5]
输出:2
解释:有 2 个元素(3 和 5)大于或等于 2 。
示例 2:
输入:nums = [0,0]
输出:-1
解释:没有满足题目要求的特殊数组,故而也不存在特征值 x 。
如果 x = 0,应该有 0 个元素 >= x,但实际有 2 个。
如果 x = 1,应该有 1 个元素 >= x,但实际有 0 个。
如果 x = 2,应该有 2 个元素 >= x,但实际有 0 个。
x 不能取更大的值,因为 nums 中只有两个元素。
示例 3:
输入:nums = [0,4,3,0,4]
输出:3
解释:有 3 个元素大于或等于 3 。
示例 4:
输入:nums = [3,6,7,7,0]
输出:-1
解题代码如下:
void quick_sort(int *a,int low,int high){
int l=low,h=high;
if(low<high){
int p=a[low];
while(low<high){
while(low<high&&a[high]>=p){
high--;
}
a[low]=a[high];
while(low<high&&a[low]<=p){
low++;
}
a[high]=a[low];
}
a[low]=p;
quick_sort(a,l,low-1);
quick_sort(a,low+1,h);
}
}
int specialArray(int* nums, int numsSize){
quick_sort(nums,0,numsSize-1);
int i=0;
for(i=0;i<numsSize;i++){
printf("%d ",nums[i]);
if(i==0){
if(numsSize-i<=nums[i]){
return numsSize-i;
}
continue;
}
if(numsSize-i<=nums[i]&&numsSize-i>nums[i-1]){
return numsSize-i;
}
}
return -1;
}
相关文章
- Go语言: 如何让 request.Body 可以多次读取
- Go 语言机制之逃逸分析
- Go语言字符串和数组的相互转换
- VB.net:VB.net编程语言学习之基于VS软件利用VB.net语言实现对SolidWorks进行二次开发的简介、案例应用之详细攻略
- 子数组的最小值之和-c语言
- 剑指 Offer II 063. 替换单词 -c语言空间效率最高算法
- c语言float转bcd码
- 用c语言编写一个函数用来删除字符串中的空格并返回空格个数
- java语言复制数组的四种方法
- Swiftly语言学习1
- c语言可变参
- Go语言自学系列 | golang数组
- 387集Go语言核心编程培训视频教材整理 | 排序和查找
- 387集Go语言核心编程培训视频教材整理 | 数组和切片
- 【c语言】调整数组使奇数所有都位于偶数前面
- go语言笔记——数组长度不可变,但是元素值是可变的!!!
- 高级语言是面向用户的
- go语言web开发系列之六:gin使用zap记录http服务的访问日志(access log)并按日期分割
- 第十三届蓝桥杯国赛 C++ C 组 Java A 组 C 组 Python C 组 E 题——斐波那契数组(三语言代码AC)
- c语言二维数组
- c语言 数组去重 删除数组中的重复元素