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;}}
文章目录 一、五种IO模型(一)阻塞IO:(二)非阻塞IO:(三)信号驱动IO:(四)IO多路转接:(五)异步IO: 二、高级IO重要概念(一)同步通信 vs 异…
BOM是英文Bill of Material的缩写,中文翻译为“物料清单”,也称为产品结构表或产品结构树。它是计算机可以识别的产品结构数据文件,也是ERP的主导文件。BOM使系统识别产品结构,也是联系与沟通企业各项业务的纽带。ERP系统中的BOM的…
来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT。
Chapter 10 Mining Social-Network Graphs
The essential characteristics of a social network are:
There is a collection of entities that participate in the network. Typically, these entiti…