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个数相关推荐

  1. 面试题40. 最小的k个数

    面试题40. 最小的k个数 思路:这题应为数据量很小,所以直接sort即可.如果数据去到10**9这种数据量的话,需要用到优先队列,遍历一次数组即可O(n+logn) 笔记:优先队列priority( ...

  2. 剑指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 ...

  3. [剑指 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], ...

  4. 剑指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] ...

  5. 剑指offer面试题40. 最小的k个数(sort函数)

    题目描述 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 思路 详见链接 代码 class Solution: ...

  6. 【LeetCode】剑指 Offer 40. 最小的k个数

    [LeetCode]剑指 Offer 40. 最小的k个数 文章目录 [LeetCode]剑指 Offer 40. 最小的k个数 一.笨比解法 二.堆排序 三.快速选择 总结 一.笨比解法 选择排序变 ...

  7. 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 输出: ...

  8. 剑指offer 40.最小的 K 个数 python代码

    题目 寻找数组中的最小的k个数,也叫topk问题. 牛客网测试地址 注意: 牛客网的提交需要将最终的结果排序 思路 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l-j-1] ...

  9. 剑指offer面试题[30]-最小的k个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 分析思路:         这道题最简单的思路莫过于把输入的n个数排 ...

最新文章

  1. 虹口区巡检机器人_上海巡检机器人
  2. java j2se1.5_用J2SE1.5建立多任务的Java应用程序...
  3. 不知道为什么IList.Contains()总是返回FALSE
  4. 我往手里面植入了一枚芯片,但并没有获得超能力
  5. Centos系统查看版本
  6. jquery class选择器循环_web前端教程分享Jquery常见面试题
  7. Android开发之音乐播放器
  8. 基于ZigBee的城市照明监控系统网关节点的软硬件设计
  9. 钝    生_拔剑-浆糊的传说_新浪博客
  10. php密码如何用星号表示,输入密码显示星号的写法实例
  11. whois信息收集企业备案信息
  12. maven实现对js文件进行变量替换和文件压缩
  13. 计算机mac地址为空,怎么查看电脑的Mac地址
  14. 移动端300ms延迟的由来及解决方案
  15. 蓝桥杯 并查集汇总学习 及其代码
  16. mysql笛卡尔积查询很慢_浅谈MySQL使用笛卡尔积原理进行多表查询
  17. android 更改浏览器默认主页
  18. javabean+servlet+jsp返利网
  19. 第6章 - 多无人车系统的协同控制 --> 多无人车协同控制
  20. Ehcache缓存时间设置

热门文章

  1. 【视频】Vue作者分享:Vue 3.0 进展
  2. arcgis不闭合线转面_【干货】ArcGIS矢量面转点、点转面,面矢量转点矢量方法讲解,值得学习!...
  3. OpenCV中的凸包
  4. 监督学习 | 决策树之网络搜索
  5. A/D采样控制电路设计---VHDL
  6. Mac上的一位数密码你知道吗
  7. 服务器硬盘raid5扩容,超实用,物理服务器RAID扩容详解
  8. python flag 参数_flag_flagpython_js开关flag - 云+社区 - 腾讯云
  9. java从基础到入门_Java从入门到入土(30)继承基础
  10. java io流_浅谈IO流(一)-流的基本概念以及java的常见流