LeetCode:面试题40. 最小的k个数
40. 最小的k个数
- 题目:
- 解题思路:
- 源码:
题目:
解题思路:
1、快速排序:
2、堆排序:
详细解释看leetcode的官网
源码:
int comp(void *a,void *b){int *A = (int*)a;int *B = (int*)b;return *A - *B;
}
int* getLeastNumbers(int* arr, int arrSize, int k, int* returnSize){qsort(arr,arrSize,sizeof(int),comp);int *output=(int*)malloc(sizeof(int)*k);for(int i=0;i<k;i++){output[i]=arr[i];}*returnSize=k;return output;
}
ps:qsort()函数包含在stdlib.h头文件中
qsort()用法:
void qsort(void* base,size_t num,size_t width,int(__cdeclcompare)(const void,const void*));
参数1:要比较的数组
参数2:数组长度
参数3:数组类型
参数4:自定义比较排序,升序还是降序;
cmp()用法:
int cmp(const void *a, const void *b);1、对int数组排序:
int cmp_int(const void* _a , const void* _b) //参数格式固定
{int* a = (int*)_a; //强制类型转换int* b = (int*)_b;return *a - *b;
}
默认升序排列(从小到大),如果想降序排列返回*b-*a即可。
2、对char数组排序:
int cmp_char(const void* _a , const void* _b) //参数格式固定
{char* a = (char*)_a; //强制类型转换char* b = (char*)_b;return *a - *b;
}qsort(word,100,sizeof(word[0]),cmp_char);
默认升序排列(从小到大),如果想降序排列返回*b-*a即可。
3、对double数组排序:
double in[100];
int cmp_double(const void* _a , const void* _b) //参数格式固定
{double* a = (double*)_a; //强制类型转换double* b = (double*)_b;return *a > *b ? 1 : -1; //特别注意
}qsort(in,100,sizeof(in[0]),cmp_double);
在对浮点或者double型的一定要用三目运算符,因为要是使用像整型那样相减
的话,如果是两个很接近的数则可能返回一个很小的小数(大于-1,小于1),
而cmp的返回值是int型,因此会将这个小数返回0,系统认为是相等,失去了
本来存在的大小关系
4、对字符串排序:
char word[100][10];
int cmp_string(const void* _a , const void* _b) //参数格式固定
{char* a = (char*)_a; //强制类型转换char* b = (char*)_b;return strcmp(a,b);
}qsort(word,100,sizeof(word[0]),cmp_string);
LeetCode:面试题40. 最小的k个数相关推荐
- 面试题40. 最小的k个数
面试题40. 最小的k个数 思路:这题应为数据量很小,所以直接sort即可.如果数据去到10**9这种数据量的话,需要用到优先队列,遍历一次数组即可O(n+logn) 笔记:优先队列priority( ...
- 剑指Offer - 面试题40. 最小的k个数(排序/大顶堆)
1. 题目 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], k ...
- [剑指 offer]--大顶堆 ➕ 快速选择 --面试题40. 最小的k个数
1 题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1], ...
- 剑指offer: 面试题40. 最小的k个数
题目:最小的k个数 入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:arr = [3,2,1] ...
- 剑指offer面试题40. 最小的k个数(sort函数)
题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思路 详见链接 代码 class Solution: ...
- 【LeetCode】剑指 Offer 40. 最小的k个数
[LeetCode]剑指 Offer 40. 最小的k个数 文章目录 [LeetCode]剑指 Offer 40. 最小的k个数 一.笨比解法 二.堆排序 三.快速选择 总结 一.笨比解法 选择排序变 ...
- Leetcode 剑指 Offer 40. 最小的k个数 (每日一题 20210825)
输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4.示例 1:输入:arr = [3,2,1], k = 2 输出: ...
- 剑指offer 40.最小的 K 个数 python代码
题目 寻找数组中的最小的k个数,也叫topk问题. 牛客网测试地址 注意: 牛客网的提交需要将最终的结果排序 思路 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l-j-1] ...
- 剑指offer面试题[30]-最小的k个数
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析思路: 这道题最简单的思路莫过于把输入的n个数排 ...
最新文章
- 虹口区巡检机器人_上海巡检机器人
- java j2se1.5_用J2SE1.5建立多任务的Java应用程序...
- 不知道为什么IList.Contains()总是返回FALSE
- 我往手里面植入了一枚芯片,但并没有获得超能力
- Centos系统查看版本
- jquery class选择器循环_web前端教程分享Jquery常见面试题
- Android开发之音乐播放器
- 基于ZigBee的城市照明监控系统网关节点的软硬件设计
- 钝 生_拔剑-浆糊的传说_新浪博客
- php密码如何用星号表示,输入密码显示星号的写法实例
- whois信息收集企业备案信息
- maven实现对js文件进行变量替换和文件压缩
- 计算机mac地址为空,怎么查看电脑的Mac地址
- 移动端300ms延迟的由来及解决方案
- 蓝桥杯 并查集汇总学习 及其代码
- mysql笛卡尔积查询很慢_浅谈MySQL使用笛卡尔积原理进行多表查询
- android 更改浏览器默认主页
- javabean+servlet+jsp返利网
- 第6章 - 多无人车系统的协同控制 --> 多无人车协同控制
- Ehcache缓存时间设置
热门文章
- 【视频】Vue作者分享:Vue 3.0 进展
- arcgis不闭合线转面_【干货】ArcGIS矢量面转点、点转面,面矢量转点矢量方法讲解,值得学习!...
- OpenCV中的凸包
- 监督学习 | 决策树之网络搜索
- A/D采样控制电路设计---VHDL
- Mac上的一位数密码你知道吗
- 服务器硬盘raid5扩容,超实用,物理服务器RAID扩容详解
- python flag 参数_flag_flagpython_js开关flag - 云+社区 - 腾讯云
- java从基础到入门_Java从入门到入土(30)继承基础
- java io流_浅谈IO流(一)-流的基本概念以及java的常见流