thảo luận Leetcode mỗi ngày

  • Người tạo chủ đề Người tạo chủ đề _Gia_Cat_Luong_
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
subarray có tổng = k thì phải là hashmap + prefix sum chứ cửa sổ trượt sao làm đc ta?
URoiprO.png
Ủa 2 con trỏ là xong mà ta
HR4W6DU.png
Hông lẽ trư nhầm
Java:
class Solution {
    public int numberOfSubArrayHaveSumEqualToK(int[] nums, int k) {
        int ans = 0, curSum = 0, left = 0;
        
        for (int right = 0; right < nums.length; right++) {
            curSum += nums[right];
            if (curSum == k) ans++;
            while (curSum >= k && left <= right) {
                curSum -= nums[left];
                left++;
            }
        }
        
        return ans;
    }
}
 
Ủa 2 con trỏ là xong mà ta
HR4W6DU.png
Hông lẽ trư nhầm
Java:
class Solution {
    public int numberOfSubArrayHaveSumEqualToK(int[] nums, int k) {
        int ans = 0, curSum = 0, left = 0;
      
        for (int right = 0; right < nums.length; right++) {
            curSum += nums[right];
            if (curSum == k) ans++;
            while (curSum >= k && left <= right) {
                curSum -= nums[left];
                left++;
            }
        }
      
        return ans;
    }
}
nhìn là thấy sai r, gặp trường hợp num=k hoặc k=0 là thuật toán này tạch
FfsqRRV.png
 
Sửa lần cuối:
hehe, dạ thanks bác. chắc đổi sang môn leetcode quá chơi chung với thread này quá, chứ codeforces chơi hại não gớm.
mình coi thử một vài solution thì có vẻ như trong đề họ có thêm vài constraint để không phải dùng backtrack nữa mà chỉ cần làm iterative thông thường thôi, mà trong đề và trong editorial không giải thích gì luôn :sweat:

dưới đây là mấy cái mình thấy, có cao nhân nào trong này giải được bài thì chỉ ra thêm:

codeforces-360a.png
 
Ủa 2 con trỏ là xong mà ta
HR4W6DU.png
Hông lẽ trư nhầm
Java:
class Solution {
    public int numberOfSubArrayHaveSumEqualToK(int[] nums, int k) {
        int ans = 0, curSum = 0, left = 0;
        
        for (int right = 0; right < nums.length; right++) {
            curSum += nums[right];
            if (curSum == k) ans++;
            while (curSum >= k && left <= right) {
                curSum -= nums[left];
                left++;
            }
        }
        
        return ans;
    }
}
Sai lè rồi, tính như này case 1 2 0 1 2, target bằng 3 chết chắc

via theNEXTvoz for iPhone
 
Tính cái đống này còn khó hơn nữa :sweat:
Sliding window thôi fence, nếu sumSofar > right thì đẩy left
lên để cho cái window valid, số subarray lúc này end at right là ans += (right - left + 1)
Đề: Tìm số sub array target = 10 [1,3,5,7]
Ví dụ 1 3 5 7, target <= 10 thì số subarray sẽ ở cái windows [1] end at 1, [1, 3] end at 3, [1, 3, 5] end at 5, [7] end at 7 sẽ là 7 sub arrays
Giờ tìm tiếp số subarray <= 9, lấy vế 2 trừ vế đầu ra kết quả
 
Sửa lần cuối:
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
_Gia_Cat_Luong_,
Người trả lời cuối
Vipluckystar,
Trả lời
17.755
Lượt xem
1.212.781
Quay lại
Lên đầu trang