classSolution{publicint[]sortedSquares(int[] nums){int n = nums.length;int[] ans =newint[n];int pos = n -1;int left =0, right = n -1;while(left <= right){if(nums[left]* nums[left]>= nums[right]* nums[right]){
ans[pos--]= nums[left]* nums[left];++left;}else{
ans[pos--]= nums[right]* nums[right];--right;}}return ans;}}
classSolution{publicintminSubArrayLen(int target,int[] nums){int left =0;int sum =0;int ans =Integer.MAX_VALUE;for(int right =0; right < nums.length;++right){
sum += nums[right];while(sum >= target){
ans =Math.min(ans, right - left +1);
sum -= nums[left++];}}return ans ==Integer.MAX_VALUE?0: ans;}}
classSolution{publicinttotalFruit(int[] fruits){Map<Integer,Integer> fruitMap =newHashMap<>();int left =0;int ans =0;for(int right =0; right < fruits.length;++right){
fruitMap.put(fruits[right], fruitMap.getOrDefault(fruits[right],0)+1);while(fruitMap.size()>2){
fruitMap.put(fruits[left], fruitMap.get(fruits[left])-1);// 若该种类数量为0, 则去除该种类if(fruitMap.get(fruits[left])==0){
fruitMap.remove(fruits[left]);}++left;}
ans =Math.max(ans, right - left +1);}return ans;}}
classSolution{publicStringminWindow(String s,String t){Map<Character,Integer> window =newHashMap<>();Map<Character,Integer> need =newHashMap<>();for(int i =0; i < t.length();++i){char ch = t.charAt(i);
need.put(ch, need.getOrDefault(ch,0)+1);}int left =0;int valid =0;int start =0;// 记录起点int ans =Integer.MAX_VALUE;for(int right =0; right < s.length();++right){char ch = s.charAt(right);// 判断该字符是否在 need 中if(need.containsKey(ch)){
window.put(ch, window.getOrDefault(ch,0)+1);if(window.get(ch)== need.get(ch)){++valid;}}while(valid == need.size()){char c = s.charAt(left);// 更新字串长度if(right - left < ans){
ans = right - left;
start = left;}if(need.containsKey(c)){
window.put(c, window.get(c)-1);if(window.get(c)< need.get(c)){--valid;}}++left;}}return ans ==Integer.MAX_VALUE?"": s.substring(start, start + ans +1);}}
classSolution{publicint[][]generateMatrix(int n){int[][] matrix =newint[n][n];int top =0, bottom = n -1;int left =0, right = n -1;int count =1;while(top <= bottom && left <= right){for(int j = left; j <= right;++j){
matrix[top][j]= count++;}for(int i = top +1; i <= bottom;++i){
matrix[i][right]= count++;}if(top < bottom && left < right){for(int j = right -1; j >= left;--j){
matrix[bottom][j]= count++;}for(int i = bottom -1; i >= top +1;--i){
matrix[i][left]= count++;}}++top;--right;++left;--bottom;}return matrix;}}
classSolution{publicList<Integer>spiralOrder(int[][] matrix){int m = matrix.length;int n = matrix[0].length;List<Integer> nums =newArrayList<>();int top =0, right = n -1;int left =0, bottom = m -1;while(top <= bottom && left <= right){for(int j = left; j <= right;++j){
nums.add(matrix[top][j]);}for(int i = top +1; i <= bottom;++i){
nums.add(matrix[i][right]);}if(top < bottom && left < right){for(int j = right -1; j >= left;--j){
nums.add(matrix[bottom][j]);}for(int i = bottom -1; i >= top +1;--i){
nums.add(matrix[i][left]);}}++top;--right;++left;--bottom;}return nums;}}
classSolution{publicint[]spiralArray(int[][] array){if(array ==null|| array.length ==0|| array[0].length ==0){returnnewint[0];}int m = array.length;int n = array[0].length;int[] nums =newint[m * n];int top =0, right = n -1;int left =0, bottom = m -1;int index =0;while(top <= bottom && left <= right){for(int j = left; j <= right;++j){
nums[index++]= array[top][j];}for(int i = top +1; i <= bottom;++i){
nums[index++]= array[i][right];}if(top < bottom && left < right){for(int j = right -1; j >= left;--j){
nums[index++]= array[bottom][j];}for(int i = bottom -1; i >= top +1;--i){
nums[index++]= array[i][left];}}++top;--right;++left;--bottom;}return nums;}}
classSolution{publicList<Integer>findAnagrams(String s,String p){// 记录 p 中的 字母以及出现的次数int[] cnt =newint[26];for(char c : p.toCharArray()){
cnt[c -'a']++;}// 使用滑窗思想来遍历 s 字符串int left =0;int right =0;List<Integer> res =newArrayList<>();while(right < s.length()){if(cnt[s.charAt(right)-'a']>0){
cnt[s.charAt(right)-'a']--;++right;if(right - left == p.length()){
res.add(left);}}else{
cnt[s.charAt(left)-'a']++;++left;}}return res;}}
classSolution{publicint[]intersection(int[] nums1,int[] nums2){if(nums1.length > nums2.length){intersection(nums2, nums1);}Set<Integer> set =newHashSet<>();for(int num : nums1){
set.add(num);}Set<Integer> ans =newHashSet<>();for(int num : nums2){if(set.contains(num)){
ans.add(num);}}int index =0;int[] res =newint[ans.size()];for(int num: ans){
res[index++]= num;}return res;}}
classSolution{publicbooleanisHappy(int n){int slow = n;int fast =getNext(n);while(fast !=1&& slow != fast){
slow =getNext(slow);
fast =getNext(getNext(fast));}return fast ==1;}publicintgetNext(int n){int sum =0;while(n >0){int tmp = n %10;
sum += tmp * tmp;
n /=10;}return sum;}}
classSolution{publicintfourSumCount(int[] nums1,int[] nums2,int[] nums3,int[] nums4){int n = nums1.length;Map<Integer,Integer> map =newHashMap<>();for(int i =0; i < n;++i){for(int j =0; j < n;++j){
map.put(nums1[i]+ nums2[j],
map.getOrDefault(nums1[i]+ nums2[j],0)+1);}}int res =0;for(int k =0; k < n;++k){for(int l =0; l < n;++l){if(map.containsKey(-(nums3[k]+ nums4[l]))){
res += map.get(-(nums3[k]+ nums4[l]));}}}return res;}}
classSolution{publicintstrStr(String haystack,String needle){// 暴力求解int n = haystack.length();int m = needle.length();for(int i =0; i + m <= n;++i){boolean flag =true;for(int j =0; j < m;++j){if(haystack.charAt(i + j)!= needle.charAt(j)){
flag =false;break;}}if(flag){return i;}}return-1;}}
classSolution{publicintstrStr(String haystack,String needle){// KMP 算法// 获得 next 数组int[] next =getKMPNext(needle);for(int i =0, j =0; i < haystack.length();++i){while(j >0&& haystack.charAt(i)!= needle.charAt(j)){
j = next[j -1];}if(haystack.charAt(i)== needle.charAt(j)){++j;}if(j == needle.length()){return i - j +1;}}return-1;}publicint[]getKMPNext(String s){int[] next =newint[s.length()];
next[0]=0;for(int i =1, j =0; i < s.length();++i){while(j >0&& s.charAt(i)!= s.charAt(j)){
j = next[j -1];}if(s.charAt(i)== s.charAt(j)){++j;}
next[i]= j;}return next;}}
classSolution{publicbooleanrepeatedSubstringPattern(String s){// 暴力求解int n = s.length();for(int i =1;2* i <= n;++i){if(n % i ==0){boolean flag =true;for(int j = i; j < n;++j){if(s.charAt(j)!= s.charAt(j - i)){
flag =false;break;}}if(flag){returntrue;}}}returnfalse;}}