1. 程式人生 > 其它 >[LeetCode] 2270. Number of Ways to Split Array

[LeetCode] 2270. Number of Ways to Split Array

You are given a 0-indexed integer array nums of length n.

nums contains a valid split at index i if the following are true:

  • The sum of the first i + 1 elements is greater than or equal to the sum of the last n - i - 1 elements.
  • There is at least one element to the right of i. That is, 0 <= i < n - 1
    .

Return the number of valid splits in nums.

Example 1:

Input: nums = [10,4,-8,7]
Output: 2
Explanation: 
There are three ways of splitting nums into two non-empty parts:
- Split nums at index 0. Then, the first part is [10], and its sum is 10. The second part is [4,-8,7], and its sum is 3. Since 10 >= 3, i = 0 is a valid split.
- Split nums at index 1. Then, the first part is [10,4], and its sum is 14. The second part is [-8,7], and its sum is -1. Since 14 >= -1, i = 1 is a valid split.
- Split nums at index 2. Then, the first part is [10,4,-8], and its sum is 6. The second part is [7], and its sum is 7. Since 6 < 7, i = 2 is not a valid split.
Thus, the number of valid splits in nums is 2.

Example 2:

Input: nums = [2,3,1,0]
Output: 2
Explanation: 
There are two valid splits in nums:
- Split nums at index 1. Then, the first part is [2,3], and its sum is 5. The second part is [1,0], and its sum is 1. Since 5 >= 1, i = 1 is a valid split. 
- Split nums at index 2. Then, the first part is [2,3,1], and its sum is 6. The second part is [0], and its sum is 0. Since 6 >= 0, i = 2 is a valid split.

Constraints:

  • 2 <= nums.length <= 105
  • -105 <= nums[i] <= 105

分割陣列的方案數。

給你一個下標從 0 開始長度為 n 的整數陣列 nums 。
如果以下描述為真,那麼 nums 在下標 i 處有一個 合法的分割 :

前 i + 1 個元素的和 大於等於 剩下的 n - i - 1 個元素的和。
下標 i 的右邊 至少有一個 元素,也就是說下標 i 滿足 0 <= i < n - 1 。
請你返回 nums 中的 合法分割 方案數。

來源:力扣(LeetCode)
連結:https://leetcode.cn/problems/number-of-ways-to-split-array
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

這道題的思路跟2256類似。2256求的是最小的滿足條件的 index,這道題其實更簡單,就是求符合題意的 index 一共有幾個,而且只是單純的求子陣列的和,用字首和的思路解決即可。

時間O(n)

空間O(1)

Java實現

 1 class Solution {
 2     public int waysToSplitArray(int[] nums) {
 3         long sum = 0;
 4         for (int num : nums) {
 5             sum += num;
 6         }
 7         
 8         int count = 0;
 9         int len = nums.length;
10         long left = 0;
11         long right = 0;
12         for (int i = 0; i < len - 1; i++) {
13             left += nums[i];
14             right = sum - left;
15             if (left >= right) {
16                 count++;
17             }
18         }
19         return count;
20     }
21 }

字首和prefix sum題目總結

LeetCode 題目總結