2026/6/9 17:40:41
网站建设
项目流程
企业网站seo点击软件,乐陵市,电子通讯录网站建设,设计分公司加盟贪心算法简介
贪心算法是一种在每一步选择中都采取当前状态下最优#xff08;即最有利#xff09;的选择#xff0c;从而试图获得结果是全局最优的算法。它并不保证在所有情况下都能得到全局最优解#xff0c;但适用于具有“贪心选择性质”的问题#xff0c;即局部最优解…贪心算法简介贪心算法是一种在每一步选择中都采取当前状态下最优即最有利的选择从而试图获得结果是全局最优的算法。它并不保证在所有情况下都能得到全局最优解但适用于具有“贪心选择性质”的问题即局部最优解能导致全局最优解。例题1盛最多水的容器问题描述给定一个长度为n的整数数组height每个元素表示垂直线的长度。找出两条线与 x 轴共同构成的容器可以容纳最多的水。容器不能倾斜。思路讲解使用双指针法从数组两端开始。容量由指针间距和较短线的高度决定。贪心策略每次移动较短线的指针因为移动较长线不会增加容量宽度减小高度受限于短线。重复直到指针相遇记录最大容量。C语言代码实现intmaxArea(int*height,intheightSize){intleft0,rightheightSize-1;intmax_water0;while(leftright){inthheight[left]height[right]?height[left]:height[right];intwaterh*(right-left);if(watermax_water)max_waterwater;if(height[left]height[right]){left;}else{right--;}}returnmax_water;}leetcode原题例题2最长回文串问题描述给定一个字符串s用其中的字符构造最长的回文串返回最大长度。注意字符可以任意顺序排列但回文串需对称。思路讲解统计每个字符的出现频率。贪心策略对于每个字符如果出现偶数次全部使用如果出现奇数次使用偶数部分即减1并标记存在奇数字符。最后如果有奇数字符长度加1中心可放一个奇数字符。C语言代码实现intlongestPalindrome(char*s){intcount[128]{0};intlenstrlen(s);for(inti0;ilen;i){count[(int)s[i]];}intmaxlen0;inthasodd0;for(inti0;i128;i){if(count[i]%20){maxlencount[i];}else{maxlencount[i]-1;hasodd1;}}if(hasodd)maxlen1;returnmaxlen;}leetcode原题总结贪心算法适用于局部最优能导致全局最优的问题如以上例题。在实际应用中需验证问题是否具有贪心性质否则可能需动态规划等其他方法。