tu_tay_bop_dai
Senior Member
Với 2 người có
Sort mảng theo thứ tự
Giờ chỉ việc add vào queue. Người add vào sau luôn có
VD: [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] => [[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]
[[7,0]] => [[7,0]]
[[7,0],[7,1]] => [[7,0],[7,1]]
[[7,0],[7,1],[6,1]] => [[7,0],[6,1],[7,1]]
[[7,0],[7,1],[6,1],[5,0]] => [[5,0],[7,0],[6,1],[7,1]]
[[7,0],[7,1],[6,1],[5,0],[5,2]] => [[5,0],[7,0],[5,2],[6,1],[7,1]]
[[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]] => [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
h
bằng nhau thì người có k
lớn hơn sẽ xếp sau.Sort mảng theo thứ tự
h
giảm dần, nếu h bằng nhau thì xếp theo k
tăng dần.Giờ chỉ việc add vào queue. Người add vào sau luôn có
h
nhỏ hơn hoặc bằng h
của các số trong queue nên ta chỉ việc add vào queue với index = k
VD: [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] => [[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]]
[[7,0]] => [[7,0]]
[[7,0],[7,1]] => [[7,0],[7,1]]
[[7,0],[7,1],[6,1]] => [[7,0],[6,1],[7,1]]
[[7,0],[7,1],[6,1],[5,0]] => [[5,0],[7,0],[6,1],[7,1]]
[[7,0],[7,1],[6,1],[5,0],[5,2]] => [[5,0],[7,0],[5,2],[6,1],[7,1]]
[[7,0],[7,1],[6,1],[5,0],[5,2],[4,4]] => [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]
C#:
public class Solution {
public int[][] ReconstructQueue(int[][] people) {
List<int[]> queue = new List<int[]>();
Array.Sort(people, (a,b) => a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]);
foreach(var person in people){
queue.Insert(person[1], person);
}
return queue.ToArray();
}
}