2134. Minimum Swaps to Group All 1's Together II
JAVA
class Solution { public int minSwaps(int[] nums) { int cnt = 0; for (int v : nums) { cnt += v; } int n = nums.length; int[] s = new int[(n << 1) + 1]; for (int i = 0; i < (n << 1); ++i) { s[i + 1] = s[i] + nums[i % n]; } int mx = 0; for (int i = 0; i < (n << 1); ++i) { int j = i + cnt - 1; if (j < (n << 1)) { mx = Math.max(mx, s[j + 1] - s[i]); } } return cnt - mx; } }
C++
class Solution { public: int minSwaps(vector<int>& nums) { int cnt = 0; for (int& v : nums) cnt += v; int n = nums.size(); vector<int> s((n << 1) + 1); for (int i = 0; i < (n << 1); ++i) s[i + 1] = s[i] + nums[i % n]; int mx = 0; for (int i = 0; i < (n << 1); ++i) { int j = i + cnt - 1; if (j < (n << 1)) mx = max(mx, s[j + 1] - s[i]); } return cnt - mx; } };
Comments
Post a Comment