thảo luận Leetcode contest, đường tới Guardian

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
có vẻ trick lỏ rồi =((
K hẳn trick lỏ đâu. Não to lắm đấy. Cái dp là giống kiểu set để lưu tổng những giá trị hiện tại của rewards được pick.

dp & ((1 << v) - 1) đoạn này là nó đang ignore những rewards lớn hơn hoặc bằng value của reward hiện tại.

dp |= x << v đoạn này là nó cộng reward hiện tại vòa toàn bộ những reward nhỏ hơn và add vào set.

Công nhận code này ảo diệu quá, nghiền ngẫm mãi mới hiểu.
 
K hẳn trick lỏ đâu. Não to lắm đấy. Cái dp là giống kiểu set để lưu tổng những giá trị hiện tại của rewards được pick.

dp & ((1 << v) - 1) đoạn này là nó đang ignore những rewards lớn hơn hoặc bằng value của reward hiện tại.

dp |= x << v đoạn này là nó cộng reward hiện tại vòa toàn bộ những reward nhỏ hơn và add vào set.

Công nhận code này ảo diệu quá, nghiền ngẫm mãi mới hiểu.
Cám ơn thím vì giải thích làm code dễ hiểu hẳn.
Java BitSet không có shiftleft. Không rõ dùng BigInteger thay thế được không.
Đã thử và accepted:

Java:
import java.math.BigInteger;

class Solution {
    public int maxTotalReward(int[] rs) {
        Arrays.sort(rs);
        int n = rs.length;
      
        BigInteger dp = BigInteger.ONE;
        int currValue = -1;
        for (int r: rs) {
            if (r == currValue) {
                continue;
            }
            currValue = r;

            BigInteger maskBitsLessThanCurr = BigInteger.ONE.shiftLeft(r).subtract(BigInteger.ONE);
            BigInteger infoBitsLessThanCurr = dp.and(maskBitsLessThanCurr);

            dp = dp.or(infoBitsLessThanCurr.shiftLeft(r));
        }

        return dp.bitLength() - 1;
    }
}
 
Sửa lần cuối:
Cuối cùng câu 4 vẫn là O(n^2) chứ không thể nhỏ hơn đc. Dùng trick lỏ bitset thì giảm xuống O(n^2/32) thôi chứ có xuống O(nlog) hay O(n) đâu. Nhìn constraint là 5*10^4 thì mình cứ mặc định phải tối ưu dưới cả O(n^2). Thôi rút kinh nghiệm lần sau ko nghĩ đc thì làm tối ưu O(n^2). Chứ bài này mình đánh giá ko hay :ah::ah:
 
Cuối cùng câu 4 vẫn là O(n^2) chứ không thể nhỏ hơn đc. Dùng trick lỏ bitset thì giảm xuống O(n^2/32) thôi chứ có xuống O(nlog) hay O(n) đâu. Nhìn constraint là 5*10^4 thì mình cứ mặc định phải tối ưu dưới cả O(n^2). Thôi rút kinh nghiệm lần sau ko nghĩ đc thì làm tối ưu O(n^2). Chứ bài này mình đánh giá ko hay :ah::ah:
Thường leetcode nó accept solution O 10^8 mà, nên O n^2/32 với 5*10^4 sẽ vẫn pass.
Memory thì ko biết bao nhiêu, có vẻ memory chỉ nên vô khoảng 10^5 thôi.

via theNEXTvoz for iPhone
 
có khóa dp với dp advance(premium) đó bác tổng cộng 100 câu
3LVOKaa.png
fence nạp card rồi à
 
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
freedom.9,
Trả lời
2.480
Lượt xem
130.265
Quay lại
Lên đầu trang