贪心算法

贪心算法
如何设计遍历的顺序以及边界如何处理,才能得到最终的答案!!!!!!!!
主要解决:区间问题、分配问题

可能存在的情况有两种:1.中间异常值大于两边的值2.中间异常值小于两边的值
1)1 2 3 7 5 6         2)2 3 5 1 7 9
这里需要保证nums[i-1] <= nums[i] <= nums[i+1]。
针对第一种情况,需要把7变小(或者直接抛弃)(7 5 出问题,判断改变7还是5,需要根据下一个数6来判断,因此需要将7变为5)
第二种情况,把1变大(5 1 出问题,判断下一个数7大于5,因此改变1为5)
  1. 非递减数列
    给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。
    我们是这样定义一个非递减数列的: 对于数组中任意的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。
排序之后考虑如何将对应的个体放在对应的位置上面,此处主要考虑身高比较高的人影响身高低的人体的第二个属性,因此需要把身高高的人放在数组里面,然后根据第二个属性进行偏移插入。vector可以使用insert函数方法,res.insert(res.begin()+people[i][1],people[i]);
  1. 根据身高重建队列
    假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。
    请在这里输入引用内容
    请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务