力扣刷题之路

简介: 力扣刷题之路

LeetCode零基础指南》(第六讲) C排序API

正在上传…重新上传取消申晓宇2021-12-05 19:49:02


今天的题进一步加深了我对数组和指针的认识

上图

一、排序数组

943bf7cd10fe24044fec8a8ddbf8590a.png

1.int cmp(const void*a, const void*b){


2.return *(int *)a - *(int *)b;


3.}


4.int* sortArray(int* nums, int numsSize, int* returnSize){


5.qsort(nums, numsSize, sizeof(int), cmp);


6.* returnSize = numsSize;


7.return nums;


8.}


二、多数元素(要注意int型的范围)

456c3384ccec7873ff812e6d58de9d59.png

int cmp(const void*a, const void*b){

   return *(unsigned int *)b - *(unsigned int *)a;

}

int majorityElement(int* nums, int numsSize){

   qsort(nums, numsSize, sizeof(int), cmp);

   return nums[numsSize / 2];

}


三、存在重复元素

921dcc0490b3e0b5b8c9862b4d07eae0.png

1.int cmp(const void*a, const void*b){


2.return *(int *)a - *(int *)b;


3.}


4.bool containsDuplicate(int* nums, int numsSize){


5.qsort(nums, numsSize, sizeof(int), cmp);


6.int i;


7.for(i = 0; i < (numsSize - 1); ++i){


8.if(nums[i] == nums[i + 1]){


9.return true;


10.}


11.}


12.return false;


13.}

14.}


四、最大间距

1a014a4c4db6d92ac2027cc12dc7fb56.png


int cmp(const void*a, const void*b){

   return *(int *)a - *(int *)b;

}

int maximumGap(int* nums, int numsSize){

   int i = 0;

   qsort(nums, numsSize, sizeof(int), cmp);

   if(numsSize < 2){

       return 0;

   }

   int max = (nums[i + 1] - nums[i]);

   for(i =1; i < (numsSize - 1); ++i){

       if( max < (nums[i + 1] - nums[i]) ){

           max = nums[i + 1] - nums[i];

       }

   }

   return max;

}


五、按奇偶排序数组

bf2699ac983f48c190cdfde536524734.png

六、最小时间差(这个不看解析真不会)

c291312b5dc6f947a57ec426ea98204a.png


1.int cmp(const void*a, const void*b){


2.return *(int *)a - *(int *)b;


3.}


4.int min(int a, int b){


5.return (a > b) ? b : a;


6.}


7.int findMinDifference(char ** timePoints, int timePointsSize){


8.int *ret = (int *)malloc(sizeof(int) * timePointsSize);


9.int m , n;


10.int i, ans = 1440;


11.for(i = 0; i < timePointsSize; ++i){


12.sscanf(timePoints[i], "%d:%d", &m, &n);


13.ret[i] = m * 60 + n;


14.}


15.qsort(ret, timePointsSize, sizeof(int), cmp);


16.for(i = 1; i < timePointsSize; ++i){


17.ans = min(ans, ret[i] - ret[i - 1]);


18.}


19.ans = min(ans, ret[0] - ret[timePointsSize - 1] + 1440);


20.return ans;


21.}


七、三角形的最大周长

dccb6e731cf1c12f2f59b31bdd1db5af.png


int cmp(const void*a, const void*b){

   return *(int *)a - *(int *)b;

}

int largestPerimeter(int* nums, int numsSize){

   int i;

   qsort(nums, numsSize, sizeof(int), cmp);

   for(i = numsSize - 1; i >= 2; --i){

       if(nums[i - 1] + nums[i - 2] > nums[i]){

           return (nums[i] + nums[i - 1] + nums[i - 2]);

       }

   }

   return 0;

}


八、救生艇

5cfed246cc21b9d71850462d11783095.png


int cmp(const void*a, const void*b){

   return *(int *)a - *(int *)b;

}

int numRescueBoats(int* people, int peopleSize, int limit){

   int ans = 0;

   int m = 0, k = peopleSize - 1;//people[m]表示所剩的体重最轻的人的体重,people[k]体重最重的人

   qsort(people, peopleSize, sizeof(int), cmp);

   while(k >= m){

       if(k == m){

           ++ans;

           break;

       }

       else if(people[m] + people[k] <= limit){

           ++ans;

           ++m;

           k--;

       }

       else{

           ++ans;

           --k;

       }

   }

   return ans;

}        


大家一定要防止数组越界啊!!!

总结

今天的题写了4、5个小时,但是值得的,自己也学到了很多,开心。

刷Leetcode时,出现了问题不要慌,要像英雄哥视频所说的,自己多造一些测试用例,进而找到方向

最后,希望大家多多关注英雄哥(手动狗头)

相关文章
|
4天前
|
算法 C++
【刷题】Leetcode 1609.奇偶树
这道题是我目前做过最难的题,虽然没有一遍做出来,但是参考大佬的代码,慢慢啃的感觉的真的很好。刷题继续!!!!!!
9 0
|
4天前
|
算法 索引
【刷题】滑动窗口精通 — Leetcode 30. 串联所有单词的子串 | Leetcode 76. 最小覆盖子串
经过这两道题目的书写,相信大家一定深刻认识到了滑动窗口的使用方法!!! 下面请大家继续刷题吧!!!
12 0
|
4天前
|
算法
【刷题】 leetcode 面试题 08.05.递归乘法
递归算法是一种在计算机科学和数学中广泛应用的解决问题的方法,其基本思想是利用问题的自我相似性,即将一个大问题分解为一个或多个相同或相似的小问题来解决。递归算法的核心在于函数(或过程)能够直接或间接地调用自身来求解问题的不同部分,直到达到基本情况(也称为基础案例或终止条件),这时可以直接得出答案而不必再进行递归调用。
25 4
【刷题】 leetcode 面试题 08.05.递归乘法
|
4天前
|
存储 算法 安全
【刷题】 leetcode 面试题 01.06 字符串压缩
来看效果: 非常好!!!过啦!!!
25 5
【刷题】 leetcode 面试题 01.06 字符串压缩
|
4天前
|
存储 算法 测试技术
|
4天前
|
算法 C语言 C++
|
4天前
|
存储 算法 C语言
C语言刷题~Leetcode与牛客网简单题
C语言刷题~Leetcode与牛客网简单题
|
4天前
刷题之Leetcode160题(超级详细)
刷题之Leetcode160题(超级详细)
15 0
|
4天前
|
Java
刷题之Leetcode19题(超级详细)
刷题之Leetcode19题(超级详细)
15 0