Đây là mấy câu hỏi phỏng vấn kinh điển. Rất nhiều các câu hỏi PV của Microsoft và Google là biến thể của hai câu sau đây:
- Viết một hàm
int significant_place(uint32_t x)bằng ngôn ngữ C, trả về vị trí của bit 1 cuối cùng bên trái củax(position of the most significant bit) - Viết một hàm
int count_ones(uint32_t x)bằng ngôn ngữ C, trả về tổng số bít 1 trong biểu diễn nhị phân củax. Hàm chạy càng nhanh càng tốt. (Có khá nhiều cách trả lời khác nhau cho bài này, mỗi cách có cái hay riêng. Quyển Beautiful Codecó hẳn một chương về bài này.)
Cập nhật 4 tháng 3: một sinh viên của tôi vừa phỏng vấn với Bloomberg chiều nay. Một trong số các câu hỏi là một câu hỏi kinh điển của cấu trúc dữ liệu:
- Giả lập một queue bằng 2 stacks, sao cho amortized cost của enqueue và dequeue là O(1).

10 Comments
Chào anh Hưng, em giải thử bài 87: dùng logarithm để tìm vị trí bit cao nhất
int significant_place(uint32_t x) {
if (x > 0) {
return ln(x) / ln(2);
}
return -1;
}
87.
if (x==0) return -1;
ulong index=31;
while ((x&(1UL<<31))==0) {–index; x<<=1;} return index;
Cách của Khoa hay đấy
tìm số mũ của x theo cơ số 2 = log (x) theo cơ số 2 = ln (x) / ln (x). Chạy sẽ nhanh.
amortized cost la gi a ?
Hi Sơn, xem ở đây. Đại khái, bất kể ta enqueue và dequeue thế nào, thì thời gian cần cho mỗi tác vụ (enqueue/dequeue) là hằng số, tính trung bình.
Câu 89 là câu lấy từ cuốn Introduction to Algorithms ra, solution thì quá obvious, sao bọn Bloomberg lại interview dễ thế nhỉ.
Oh, my god! I don’t know how to do if i get those questions!
Mình có bài này rất nice, share mọi người làm cho fun.
Bạn có 1 array[0..n-1], (n>=2). Hãy tìm max gap với amortized cost là O(n). Định nghĩa max gap có thể hiểu như sau:
sort(a, a+n);
maxgap=a[1]-a[0];
for i:1-(n-1) maxgap >?= a[i]-a[i-1];
return maxgap;
Cheers,
Hi anh Hưng, cám ơn anh Hưng đã recommend cuốn Beautiful code, em rất thích đọc những cuốn sách “explain how they think”
Hi, em không hiểu lắm cách của anh Khoa.
Nếu t là vị trí bit cao nhất thì 2^t = x nếu x chỉ có 1 bit 1. Còn nếu x có nhiều bit 1 thì sao ạ ?