229. 多数元素 II-快速排序加计数统计法
排序 快速 元素 II 计数 多数
2023-09-14 09:06:52 时间
229. 多数元素 II-快速排序加计数统计法
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
示例 1:
输入:nums = [3,2,3]
输出:[3]
示例 2:
输入:nums = [1]
输出:[1]
示例 3:
输入:nums = [1,2]
输出:[1,2]
今天做的后两个题目感觉挺像的,后面两个属于一种计数题目类型,感兴趣的,可以学习一下,此题解题代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int cmp(const void* a, const void* b)
{
return *(int*)a - *(int*)b;
}
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* majorityElement(int* nums, int numsSize, int* returnSize){
int threshold=numsSize/3;
qsort(nums,numsSize,sizeof(int),cmp);
//quick_sort(nums,0,numsSize-1);
int pre=nums[0]+1;
int count=1;
int size=0;
for(int i=0;i<numsSize;i++){
if(nums[i]==pre){
count++;
}
else{
count=1;
pre=nums[i];
}
if(count>threshold){
while(nums[i]==pre){
i++;
if(i==numsSize){
break;
}
}
i--;
nums[size++]=pre;
}
}
*returnSize=size;
return nums;
}
相关文章
- 并行快速排序
- 经典算法题每日演练——第二十三题 鸡尾酒排序
- Java实现 蓝桥杯 算法提高 快速排序
- Java实现快速排序
- 7-crm项目-kingadmin,列表页---排序
- 算法常识——快速排序
- 使用冒泡排序对一维数组进行排序
- TreeSet的两种排序方法
- 数据结构和算法11 之基础排序
- 排序算法 - 快速排序
- 简单谈谈 数组排序 的方法 【自定义算法 、 冒泡算法 等】
- 1481. 不同整数的最少数目-快速排序+贪心算法
- 剑指 Offer 61. 扑克牌中的顺子-排序
- 1968. 构造元素不等于两相邻元素平均值的数组-快速排序
- 1561. 你可以获得的最大硬币数目-快速排序—贪心算法
- 特殊数组的特征值-c语言快速排序
- 寻找中位数(利用快速排序来寻找中位数)
- [数据结构与算法] 2.快速排序 Java 实现
- 算法----选择排序(select sort)
- 快速排序
- 排序算法之快速排序
- 关于查找(二分查找)和排序(冒泡和快速)
- 归并排序(排序)
- 快速排序详解