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.
kháy @Cố Trường Ca à Đơn?
MHoYqPz.png
mỗi contest giải 1 câu tắt máy đi ngủ cũng ko xuống dưới 1k5 dc mà tiểu đơn xiao lin hả
mzyidY1.png
Giờ leetcode toàn cao thủ thôi, làm từ 1 đến 2 câu vẫn ko qua nổi 1k4? :too_sad:
1727936616000.png
 
Java:
class Solution {
    public int minSubarray(int[] nums, int p) {
        int n = nums.length;
        long sum =0;
        int res = n;
        for(int num:nums){
            sum+=num;
        }
        int target = (int) (sum%p);
        int[] prefix = new int[n+1];
        prefix[0] = 0;
        HashMap<Integer,Integer> map = new HashMap();
        map.put(0,0);
        for(int i =1 ; i<=n;i++){
            prefix[i] = (prefix[i-1]+ nums[i-1])%p;
            // System.out.print(" " + prefix[i]);
        }
        if(target==0) return 0;
        for(int i =1; i<=n;i++ ){
            if(prefix[i]%p == target) {
                res = Math.min(res,i);
            }
            int e =  (prefix[i]-target+p)%p;
            // System.out.println(i +  ": "+ e);
            if(map.containsKey(e)){
                res =Math.min(i-map.get(e),res);
            }
            map.put(prefix[i], i );

        }
        return res==n?-1:res;
     
    }
}
Bác nói thế hơi quá :D giống 1 tý thôi chứ bài này khó hơn nhiều.
 
C#:
public class Solution {
    public int MinSubarray(int[] nums, int p) {
        long k = 0;
        long sum = 0;
        for (int i = 0; i < nums.Length; ++i) {
            sum += nums[i];
        }
        k = (sum % p);
        if (k == 0) return 0;
        Dictionary<long, int> modP = new();
        long[] prefixSum = new long[nums.Length];
        int res = 100000008;
        modP[0] = -1;
        sum = 0;
        for (int i = 0; i < nums.Length; ++i) {
            if (nums[i] == k) return 1;
            sum = (sum + nums[i]);
            long m = (sum % p);
            long t = ((m - k) % p + p)%p;
            if (modP.ContainsKey(t)) {
                res = Math.Min(res, i - modP[t]);
            }
            modP[m] = i;
        }
        if (res >= nums.Length) return -1;
        return res;

    }
}
 
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.214.566
Quay lại
Lên đầu trang