欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > LeetCode406☞根据身高重建队列

LeetCode406☞根据身高重建队列

2025/5/15 23:38:03 来源:https://blog.csdn.net/fantasy_4/article/details/147073075  浏览:    关键词:LeetCode406☞根据身高重建队列

关联LeetCode题号406

本题特点
  • 贪心算法
  • 关于出现两个维度一起考虑的情况,(本题是身高和排行两个维度)其技巧都是确定一边然后贪心另一边,两边一起考虑,就会顾此失彼。类似LeetCode135☞分糖果

局部最优:优先按身高高的people的k来插入。插入操作过后的people满足队列属性。

全局最优:最后都做完插入操作,整个队列满足题目队列属性。

  • 一开始先按照排行维度考虑排序,发现身高和排行都不能确定
  • 再考虑按照身高维度排序,如果身高相同,就按照排行从小到大排序,这样就会得到一个身高按照从大小的排列顺序,
  • 题目要求,每个元素前面都是身高大,所以只要根据排行的位置进行插入(头插法)即可,因为后面身高都是小于前面的,向前插入永远不会出现,该元素前有比该元素还小的的元素
python写法
class Solution:def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]:# 先按照h维度的身高顺序从高到低排序。确定第一个维度# lambda返回的是一个元组:当-x[0](维度h)相同时,再根据x[1](维度k)从小到大排序people.sort(key=lambda x: (-x[0], x[1]))que = []# 根据每个元素的第二个维度k,贪心算法,进行插入# people已经排序过了:同一高度时k值小的排前面。for p in people:que.insert(p[1], p)return que

people.sort(key=lambda x: (-x[0], x[1]))

#按照第一个元素的从大到小排序,如果第一个元素相同,则按照第二个元素从小到大排序

Java写法
package leetcode;import org.junit.jupiter.api.Test;import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;/*** File Description: QueueReconstructionByHeight_406* Author: Your Name* Date: 2024/12/25*/
public class QueueReconstructionByHeight_406 {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, (a, b)->{if (a[0] == b[0]) return a[1] - b[1];return b[0] - a[0];});ArrayList<int[]> que = new ArrayList<>();for (int[] p: people){que.add(p[1], p);}int[][] q = new int[people.length][];return que.toArray(q);}@Testpublic void TestReconstructQueue(){int[][] q = {{7,0}, {4,4},{7,1},{5,0},{6,1},{5,2}};int[][] res = reconstructQueue(q);System.out.println(Arrays.deepToString(res));}}
1. lambda表达式☞类的静态方法

sort(Comparator) , (a,b)->a-b 表示从小到大排序,b-a表示从大到小

Arrays.sort(people, (a, b)->{if (a[0] == b[0]) return a[1] - b[1];return b[0] - a[0];})
2. ArrayList转化为Arrays

ArrayList的对象方法toArray(arr) 优先将列表元素存到数组arr,否则,将为此分配相同运行时类型的新数组。

匿名类方法写成

que.toArray(new int[people.length][])
3. 将Arrays转化成String输出具体元素值

一维数组使用Arrays.toString(arr),若二维数组使用该方法,输出子层元素值

二维数组使用Arrays.deepToString(arr)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词