欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode:面试题40. 最小的k个数

发布时间:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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个数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。