贪心算法
采用贪心策略,保证每次操作是局部最优的,从而使随后结果是全局最优的。
455.分配饼干
- 贪心策略:尽量把最小的饼干分配给胃口最小的孩子。
- 我的代码:
- 算法描述:
- 将孩子的胃口值g和拥有的饼干s进行升序排列;
- 使用双指针对胃口和饼干进行遍历,在胃口和饼干都被遍历完之前(分配完成),为每个胃口匹配能完成它的最小饼干,满足胃口即计数+1,直到退出循环。
135.分糖果
- 贪心策略:在每次遍历中,只考虑并更新一侧的大小关系。
- 官方代码:
- 我的代码:
- 算法描述【我的代码】:
- 将所有孩子的的糖果数初始化为1;
- 先从左往右遍历一遍,如果右边孩子的评分比左边孩子高,则右边孩子的糖果数更新为左边孩子的糖果数+1;
- 再从右往左遍历,如果左边的孩子评分比右边高且左边孩子的糖果数小于等于右边孩子的糖果数,则左边孩子的糖果数更新为右边孩子的糖果数+1.
435.区间问题
- 贪心策略:优先保留结尾小且不相交的区间。
- 官方代码:
- 算法描述:
- 先确定首个区间,应该满足右端点最小;将所有区间按照右端点从小到大进行排序;
- 下一个区间应该满足于首个区间不重合且右端点最小的区间;
- 依次排列,形成最终最优的不重叠区间结果。
Arrays.sort用法
452.用最少数量的箭引爆气球
-
我的代码:
-
算法思路:这个题与435.区间问题本质上是同一个问题,将所有气球的区间排列成为最少的不重复区间,包括端点不重复,这样用的箭的数量其实是满足了所有气球都能被引爆的最小值。
605.种花问题
- 我的代码
- 算法描述:判断一个位置是否能够种花,只需要判断这个位置的左右两边是否有位置;对于最开始和最后的位置,只需要判断位置的右边或者左边是否有空位;为了将这些情况归一化处理,在最开始和最后的位置上各加1个0,再按照普遍情况进行遍历即可。
763.划分字母区间
- 官方代码:
对字符串还不太了解,暂时放弃; - 算法描述:
122.买卖股票的最佳时间
- 我的代码:
- 算法描述:把一段时间的购入卖出理解为每天都在购入卖出,如果这一天可以获利,就执行购入并卖出;如果这一天不能获利就不购入,自然也无需卖出;实际不是这样操作的,但是可以用这种思想解决问题。