classSolution {publicintminSwaps(int[] nums) {int n =nums.length;int winSize =0; // all 1's togeter will be the window size// for circular array, just need " append another same array " on the original arrayint[] data =newint[2*n]; for (int i =0; i < n; i++) {if (nums[i] ==1) { winSize++; } data[i] = nums[i]; data[i+n] = nums[i]; }int left =0;int oneCount =0; // count in this window, how many oneint res = winSize;for (int right =0; right <data.length; right++) {if (right - left +1> winSize) { oneCount -= data[left++]; } oneCount += data[right];if (right - left +1== winSize) {// 0 needs to swap = winSize(total of ones) - one's count in window res =Math.min(res, winSize - oneCount); } }return res; }}