解题报告(6)

本文介绍了如何利用贪心策略和升序排列解决五道编程问题,涉及数组操作、最优化分配、双指针技巧。核心在于理解局部最优到全局最优的思路,并展示了如何运用qsort和双指针技巧优化解决方案。

第一题

 思路:升序排列后取最优情况

第二题

思路:让升序排列从左开始相邻两项一起

第三题

 思路:原本想的是判断最轻的两个人能否坐上,但贪心应该考虑符合情况的最优情况,即从重的开始考虑,如果最重的连最轻的也不能一起坐,那么最重的一定自己坐

运用双指针,从末尾开始考虑,如果最重的人和最轻的人也不能一起坐,那么必然自己做,cnt++,r--(最重的排除),可以一起坐就cnt++,l++,r--,循环到l<=r为止,l==r就说明只剩一个人,cnt++

int cmp(const void* a, const void* b)
{
    return *(int *)a-*(int *)b;
}
int numRescueBoats(int* people, int peopleSize, int limit){
int l=0;
int r=peopleSize-1;//双指针
int cnt=0;
qsort(people,peopleSize,sizeof(int),cmp);
while(l<=r)
{
    if(l==r)
    {
        cnt++;
        return cnt;
    }
    else{
        if(people[r]+people[l]<=limit)
        {
            cnt++;
            l++;
            r--;
        }
        else{
            cnt++;
            r--;
        }
    }
}
return cnt;
}

 第四题

 

 思路:复制一个nums数组,奇偶分类插元素

重点:若想在for循环中表现循环或者想要的递增递减步长与for循环步长不同,则可以在for循环中使用r--,如上图,i每次加2,r每次减一

第五题

int cmp(const void *a, const void *b) {
    return *(int *)a - *(int *)b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize){
qsort(g, gSize, sizeof(int), cmp);
qsort(s, sSize, sizeof(int), cmp);
int l=sSize-1;//s也就是饼干的指针
int r=gSize-1;//g也就是胃口的指针
int cnt=0;
while(l>=0&&r>=0)
{
        if(s[l]>=g[r])
        {
cnt++;
l--;
r--;
        }
        else{
r--;
        }
    }
return cnt;
}

思路:

 

 贪心算法就是从局部最优到全局最优,

所以局部最优是让最大的饼干满足胃口最大的小孩,所以双指针

两个都指向饼干和胃口的 末尾,如果不能满足,则让胃口--,因为最大的饼干也无法满足他

第六题

int cmp(const void* a, const void* b)
{
    return *(int *)a-*(int *)b;
}
int minIncrementForUnique(int* nums, int numsSize){
    int cnt=0;
    int curmax=-1;;//pre表示前一个数,即下一个数要比较的数,所以要+1

qsort(nums,numsSize,sizeof(int),cmp);
for(int i=0;i<numsSize;i++)
{
   if(nums[i]<=curmax)//当前数字要比最大值还要大一才能不同
   {
curmax++;
       cnt+=curmax-nums[i];
     
   }
   else{
       curmax=nums[i];//更新最大值
   }
   }
   return cnt;
}

思路:先升序排列,记录curmax,无须将数组中每个元素改变,只需记录次数,注意判断条件是num[i]<=curmax,每次循环之后要更新curmax

总结:贪心算法就是局部最优到全局最优的过程,往往与升序排列和双指针有关

单向双向V2G 环境下分布式电源与电动汽车充电站联合配置方法(Matlab代码实现)内容概要:本文介绍了在单向和双向V2G(Vehicle-to-Grid)环境下,分布式电源与电动汽车充电站的联合配置方法,并提供了基于Matlab的代码实现。研究涵盖电力系统优化、可再生能源接入、电动汽车充放电调度、储能配置及微电网经济调度等多个关键技术领域,重点探讨了在不同电价机制和需求响应策略下,如何通过智能优化算法实现充电站与分布式电源的协同规划与运行优化。文中还展示了多种应用场景,如有序充电调度、鲁棒优化模型、多目标优化算法(如NSGA-II、粒子群算法)在电力系统中的实际应用,体现了较强的工程实践价值和技术综合性。; 适合人群:具备电力系统、新能源、智能优化算法等相关背景的科研人员、研究生及从事能源系统规划与优化的工程技术人员;熟悉Matlab/Simulink仿真工具者更佳。; 使用场景及目标:①用于科研项目中关于电动汽车与分布式电源协同配置的模型构建与仿真验证;②支持毕业论文、期刊投稿中的案例分析与算法对比;③指导实际电力系统中充电站布局与能源调度的优化设计。; 阅读建议:建议结合文中提供的Matlab代码与具体案例进行同步实践,重点关注优化模型的数学建模过程与算法实现细节,同时可参考文末网盘资源获取完整代码与数据集以提升学习效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值