1 学习内容 贪心算法
存在这么一类最优解问题,我们无法找出最优解,或者找出最优解需要花费的计算资源太多,即想要得到结果是一件很贵的事情,此时,使用贪心算法就能够以较小的代价逼近最优解。
贪心算法的核心思想在于,只考虑当前情况下的局部最优解,而非全局最优,当局部最优全部遍历完成后,在理想情况下,得到的结果与全局最优解几乎相等。
2 Leetcode 刷题
2.1 数组元素比较
相关题目
第1题的源码如下。
int cmp(const void* a, const void* b){
return *(int *)a - *(int *)b;
}
int maxProductDifference(int* nums, int numsSize){
qsort(nums, numsSize, sizeof(int), cmp);
return nums[numsSize-1] * nums[numsSize-2] - nums[0] *nums[1];
}
第4题的源码如下。
int cmp(const void *a, const void *b){
return *(int *)a - *(int *)b;
}
void wiggleSort(int* nums, int numsSize){
int l, r, i;
int *ret = (int *)malloc(sizeof(int) * numsSize);
for (i =0; i< numsSize; ++i){
ret[i] = nums[i];
}
qsort(ret, numsSize, sizeof(int), cmp);
r = numsSize - 1;
for(i = 1; i < numsSize; i += 2){
nums[i] = ret[r--];
}
for(i = 0; i<numsSize; i+=2){
nums[i] = ret[r--];
}
}
2.2 多数组之间的元素比较
相关题目
第1题源码如下。
int cmp(const void *a, const void *b){
return *(int *)a - *(int *)b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize){
int i, j, ans;
qsort(g, gSize, sizeof(int), cmp);
qsort(s, sSize, sizeof(int), cmp);
i = gSize - 1;
j = sSize - 1;
ans = 0;
while(i >= 0 && j >= 0){
if(s[j] >= g[i]){
--i, --j, ++ans;
}
else{
--i;
}
}
return ans;
}
2.3 拓展
相关题目
第1题的源码如下。
int minOperations(int* nums, int numsSize){
int ans = 0, pre = nums[0] + 1;
for (int i = 1; i < numsSize; ++i){
if (pre < nums[i]){
pre = nums[i] + 1;
}
else{
ans += pre - nums[i];
++pre;
}
}
return ans;
}