classSolution{publicintminSubArrayLen(int target,int[] nums){int sum =0;int ret =Integer.MAX_VALUE;for(int left =0, right =0; right < nums.length; right++){
sum += nums[right];//如果窗口内元素大于target此时就要移动left指针,直到窗口内值小于target,并且过程中不断更新结果while(sum >= target){
ret =Math.min(ret,right - left +1);
sum -= nums[left++];}}return ret ==Integer.MAX_VALUE?0: ret;}}
classSolution{publicintlengthOfLongestSubstring(String s){int[] hash =newint[128];//数组模拟哈希表int ret =0;char[] arr = s.toCharArray();for(int left =0, right =0; right < s.length(); right++){
hash[arr[right]]++;//每次将right位置的元素放在哈希表中while(hash[arr[right]]>1){//当放进去的元素重复时,就开始移动左指针删除做指针指向的元素
hash[arr[left++]]--;}
ret =Math.max(ret,right-left+1);}return ret;}}
11. 最大连续 1 的个数 III
题目
思路
根据题意翻转0,我们可以将问题转化为数组中最长的不超过k个0的序列
此时根据滑动窗口就可以很好的解决这道题目
classSolution{publicintlongestOnes(int[] nums,int k){int cnt =0;int ret =0;for(int left =0,right =0; right < nums.length; right++){//如果进窗口的元素是0,则0计数器+1if(nums[right]==0){
cnt++;}//此时窗口中0的个数超出了要求,移动左指针left调整窗口,使其符合题意while(cnt == k +1){if(nums[left++]==0){
cnt--;}}
ret =Math.max(ret,right-left+1);}return ret;}}
1658. 将 x 减到 0 的最⼩操作数
题目
思路
这道题通过题意,可以转化为和为sum-x的最大子数组
使用滑动窗口来解决此题
代码
classSolution{publicintminOperations(int[] nums,int x){int sum =0;for(int i =0;i < nums.length; i++){
sum += nums[i];}int k = sum - x;if(k <0){return-1;}int ret =-1;
sum =0;for(int left =0, right =0; right < nums.length; right++){
sum += nums[right];while(sum > k){
sum -= nums[left++];}if(sum == k){
ret =Math.max(ret,right - left +1);}}if(ret ==-1){return-1;}return nums.length - ret;}}
904. 水果成篮
题目
思路
题目已经暗示我们使用滑动窗口来解决问题,把问题转化成最长的只有两种数字的字串
通过哈希表的方式来记录是否超出种类
代码
classSolution{publicinttotalFruit(int[] fruits){Map<Integer,Integer> hash =newHashMap<>();int ret =0;for(int left =0, right =0; right < fruits.length; right++){
hash.put(fruits[right],hash.getOrDefault(fruits[right],0)+1);while(hash.size()>2){
hash.put(fruits[left],hash.get(fruits[left])-1);if(hash.get(fruits[left])==0){
hash.remove(fruits[left]);}
left++;}
ret =Math.max(ret,right - left +1);}return ret;}}
classSolution{publicList<Integer>findAnagrams(String s,String p){List<Integer> ret =newArrayList<>();Map<Character,Integer> start =newHashMap<>();Map<Character,Integer> end =newHashMap<>();for(int i =0; i < p.length(); i++){
start.put(p.charAt(i),start.getOrDefault(p.charAt(i),0)+1);}for(int left =0, right =0; right < s.length(); right++){
end.put(s.charAt(right),end.getOrDefault(s.charAt(right),0)+1);if(right - left +1== p.length()){if(start.equals(end)){
ret.add(left);if(end.get(s.charAt(left))==1){
end.remove(s.charAt(left));}else{
end.put(s.charAt(left),end.getOrDefault(s.charAt(left),0)-1);}}else{
end.put(s.charAt(left),end.getOrDefault(s.charAt(left),0)-1);if(end.get(s.charAt(left))==0){
end.remove(s.charAt(left));}}
left++;}}return ret;}}
快速排序
模板
void quick_sort(int q[], int l, int r)
{if (l > r) return;int i l - 1, j r 1, x q[l r >> 1];while (i < j){do i ; while (q[i] < x);do j -- ; while (q[j] > x);if (i < j) swap(q[i], q[j]);}quick_sort(q, l, j)…
文章目录 Line Renderer组件添加Line Renderer组件重要属性Positions(位置)Width (宽度)Material(材质)其他属性 使用脚本绘制直线绳子运行结果其他文章 Line Renderer组件
我们可以使用LineRenderer组件来…