#10 LeetCodeDaily - Bài này khó quá nh?ng t?i ?? làm ???c!
Sau chu?i bài bit manipulation là nh?ng bài d?ng s? và m?ng khó nh?n, ch? kh?ng có d? th? tí nào.
?? bài
Cho 1 m?ng 2 chi?u items t?i ?ó mà m?i item = [price, beauty] (có th? coi nh? là giá và ch?t l??ng c?a m?t món hàng).
Cho m?ng queries, v?i m?i ph?n t? queries[i] trong m?ng queries, l?y ra beauty c?a item có beauty cao nh?t và price <= queries[i]. N?u kh?ng có tho? m?n thì l?y 0.
Tr? v? m?ng k?t qu? queries t??ng ?ng.
Y t??ng
VD: items = [[1,5],[3,2],[2,4],[5,6],[3,5]], queries = [1,2,3,4,5,6]
Sau ?ó items = [[1,5],[2,4],[3,5],[3,2],[5,6]]
Sau ?ó items = [[1,5],[2,5],[3,5],[3,5],[5,6]]
Sau ?ó queries = [5,5,5,5,6,6]
Tri?n khai
class Solution {
public int[] maximumBeauty(int[][] items, int[] queries) {
Arrays.sort(items, (o1, o2) -> {
if (o1[0] != o2[0]) {
return Integer.compare(o1[0], o2[0]);
} else {
return Integer.compare(o2[1], o1[1]);
}
});
int maxBeauty = items[0][1];
for (int i = 0; i < items.length; i++) {
if (maxBeauty > items[i][1]) {
items[i][1] = maxBeauty;
} else {
maxBeauty = items[i][1];
}
}
for (int i = 0; i < queries.length; i++) {
queries[i] = search(queries[i], items);
}
return queries;
}
private int search(int query, int[][] items) {
if (query < items[0][0]) {
return 0;
}
int left = 0;
int right = items.length - 1;
while (left <= right) {
int mid = (left + right) >>> 1;
int midPrice = items[mid][0];
int compare = Integer.compare(midPrice, query);
if (compare < 0)
left = mid + 1;
else if (compare > 0)
right = mid - 1;
else
return items[mid][1];
}
return items[(left + right)/2 ][1];
}
}
K?t qu?
K?t qu? có runtime và memory r?t t?t, t?i ?? c?m th?y tho? m?n, h?m nay t?i kh?ng ph?i t?i ?u l?i gi?i thu?t!!!
?? ph?c t?p th?i kh?ng
G?i a là ?? dài c?a m?ng items, b là ?? dài c?a m?ng queries
?? ph?c t?p th?i gian: O(a log(a)) + O(a) + O(b log (a)) = O( (a+b)log(a))
O(a log(a)) là ?? ph?c t?p s?p x?p m?ng items
O(a) là ?? ph?c t?p c?a b??c gán l?i beauty cho t?ng ph?n t?
O(b log (a)) là ?? ph?c t?p khi ph?i l?p qua m?ng queries và tìm ki?m nh? phan
?? ph?c t?p kh?ng gian: O(1) vì t?i ch? ch?a m?t vài bi?n t?m.
K?t lu?n
T?i ngh? m?u ch?t ? ?ay chính làb??c gán l?i beauty cho t?ng ph?n t?. ?i?u này khi?n cho vi?c tìm ki?m nh? phan tr? nên d? dàng h?n r?t nhi?u.
?ay là m?t bài r?t hay (hay thì th??ng khó), nh?ng c?ng may là t?i ?? làm ???c!!!
Software Engineer
2 周H?t ??t bit manipulation gi? chuy?n sang binary search nghe c?ng b?t khó th? anh ???