leetcode548 Split Array with Equal Sum

思路:

使用哈希表降低复杂度。具体来说:

枚举j:

    枚举i,如果sum[i - 1] == sum[j - 1] - sum[i],就用哈希表把sum[i - 1]记录下来;

    枚举k,如果sum[k - 1] - sum[j] == sum[n - 1] - sum[k]并且哈希表中存在sum[k - 1] - sum[j],返回true。

返回false。

实现:

 1 class Solution
 2 {
 3 public:
 4     bool splitArray(vector<int>& nums)
 5     {
 6         int n = nums.size();
 7         if (n < 7) return false;
 8         vector<int> sum(n, 0);
 9         sum[0] = nums[0];
10         for (int i = 1; i < n; i++) sum[i] = sum[i - 1] + nums[i];
11         for (int j = 3; j <= n - 4; j++)
12         {
13             unordered_set<int> st;
14             for (int i = 1; i < j - 1; i++)
15             {
16                 if (sum[i - 1] == sum[j - 1] - sum[i]) st.insert(sum[i - 1]);
17             }
18             for (int k = j + 2; k <= n - 2; k++)
19             {
20                 if (sum[k - 1] - sum[j] == sum[n - 1] - sum[k] && st.count(sum[k - 1] - sum[j]))
21                     return true;
22             }
23         }
24         return false;
25     }
26 }

猜你喜欢

转载自www.cnblogs.com/wangyiming/p/11300681.html