2022/4/20(qsort函数应用,动态规划)
题目描述:
912. 排序数组 - 力扣(LeetCode) (leetcode-cn.com)
912. 排序数组
给你一个整数数组 nums,请你将该数组升序排列。
我的题解:
int cmp ( const void * p1, const void * p2) {
return ( * ( int * ) p1) - ( * ( int * ) p2) ;
}
int * sortArray ( int * nums, int numsSize, int * returnSize) {
qsort ( nums, numsSize, sizeof ( int ) , cmp) ;
* returnSize= numsSize;
return nums;
}
我的思路:
void qsort ( void * base, size_t nitems, size_t size, int ( * compar) ( const void * , const void * ) ) ;
题目描述:
169. 多数元素 - 力扣(LeetCode) (leetcode-cn.com)
169. 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/ 2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素
我的题解:
# include <stdlib.h>
# include <stdio.h>
int cmp ( const void * p1, const void * p2) {
return ( * ( int * ) p1) - ( * ( int * ) p2) ;
}
int majorityElement ( int * nums, int numsSize) {
qsort ( nums, numsSize, sizeof ( int ) , cmp) ;
return nums[ numsSize/ 2 ] ;
}
我的思路:
题目描述
164. 最大间距 - 力扣(LeetCode) (leetcode-cn.com)
164. 最大间距
给定一个无序的数组 nums,返回 数组在排序之后,相邻元素之间最大的差值 。如果数组元素个数小于 2 ,则返回 0 。
您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法
我的题解:
int cmp ( const void * p1, const void * p2)
{
return * ( int * ) p1- * ( int * ) p2;
}
int maximumGap ( int * nums, int numsSize) {
int i, max= 0 ;
qsort ( nums, numsSize, sizeof ( int ) , cmp) ;
for ( i= 1 ; i< numsSize; ++ i)
{
if ( nums[ i] - nums[ i- 1 ] > max)
max= nums[ i] - nums[ i- 1 ] ; ;
}
return max;
}
思路:
题目描述:
905. 按奇偶排序数组 - 力扣(LeetCode) (leetcode-cn.com)
905. 按奇偶排序数组
给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。
我的题解:
# include <stdlib.h>
int qua ( int x) {
return x& 1 ;
}
int cmp ( const * p1, const * p2) {
return qua ( * ( int * ) p1) - qua ( * ( int * ) p2) ;
}
int * sortArrayByParity ( int * nums, int numsSize, int * returnSize) {
int i;
int * ret= ( int * ) malloc ( numsSize* sizeof ( int ) ) ;
for ( i= 0 ; i< numsSize; ++ i) {
ret[ i] = nums[ i] ;
}
qsort ( ret, numsSize, sizeof ( int ) , cmp) ;
* returnSize= numsSize;
return ret;
}
思路:
题目描述:
53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
我的题解:
int maxSubArray ( int * nums, int numsSize) {
int i, pre= 0 , max= nums[ 0 ] ;
for ( i= 0 ; i< numsSize; i++ ) {
pre= fmax ( pre+ nums[ i] , nums[ i] ) ;
max= fmax ( pre, max) ;
}
return max;
}
思路: