herrDeng網內搜尋

自訂搜尋

Ads

2024年6月8日 星期六

Python C++使用prefix sum mod k + hash map解Leetcode523 Continuous Subarray...



Python C++使用prefix sum mod k + hash map解Leetcode523  Continuous Subarray Sum。模k,前綴和 (mod k) 總共有 k 個可能,為 0,1,...k-1。 對於這個條件 1 less eq nums.length less eq 10^5 O(n^2) 解可能會導致 TLE。 對於此條件 1 less leq k less eq 2^31 - 1,陣列版本解決方案可能會導致 MLE。 然而,注意使用前綴和 mod k 的hash映射是一個有效解法。
modulo k there are 0,1,...k-1 totally k possible for prefix sum (mod k).
For this constraint 1  less eq nums.length  less eq 10^5 an O(n^2) solution may lead to TLE.
For this constraint 1 less leq k less eq 2^31 - 1, an array version solution might lead to MLE. 
C++解請進

A hash map with care on prefix sum mod k to use is however a tip.
  1. class Solution {
  2. public:
  3. inline static int hash_map(vector& nums, int k, int n){
  4. unordered_map mod_k;// 1 <= k <= 2^31 - 1
  5. int prefix=0;
  6. mod_k.reserve(n);
  7. mod_k[0]=-1;//sum can begin from index i=0
  8. for(int i=0; imod_k[prefix]+1)
  9. return 1;
  10. }
  11. else
  12. mod_k[prefix]=i;// mod_k[prefix]=i
  13. }
  14. return 0;
  15. }
  16. inline static int array(vector& nums, int k, int n){
  17. vector mod_k(k, INT_MIN);// mod k=0,1,...,k-1
  18. int prefix=0;
  19. mod_k[0]=-1;//sum can begin from index i=0
  20. for(int i=0; i<n; i++){
  21. prefix+=nums[i];
  22. prefix%=k;
  23. if (mod_k[prefix]!=INT_MIN){
  24. if (i>mod_k[prefix]+1)
  25. return 1;
  26. }
  27. else mod_k[prefix]=i;// mod_k[prefix]=i
  28. }
  29. return 0;
  30. }
  31. static bool checkSubarraySum(vector& nums, int k) {
  32. int n=nums.size();
  33. if (n<2) return 0; //its length is at least two
  34. if (k>=n) return hash_map(nums, k, n);
  35. return array(nums, k, n);
  36. }
  37. };

沒有留言:

Related Posts Plugin for WordPress, Blogger...

熱門文章