LeetCode – 209
相加大于target的最小数组长度
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//繁琐的考虑阈值
// if(nums.length == 0 || nums == null){
// return 0;
// }
// int min = 0;
// int max = 0;
// int sum = nums[max];
// int n = nums.length;
// while(max < nums.length && min <= max){
// if(sum < target){
// if(max - min + 1 == nums.length){
// return 0;
// }
// max++;
// if(max == nums.length){
// break;
// }
// sum = sum + nums[max];
// }else if(sum >= target){
// int n0 = max - min + 1;
// if(n0 < n){
// n = n0;
// }
// //min后移
// sum = sum - nums[min];
// min++;
// }
// }
// return n;
//合理利用了循环体,在一个max下进行min的循环
if(nums.length == 0 || nums == null){
return 0;
}
int min = 0;
int max = 0;
int sum = 0;
int n = nums.length+1;
while(max < nums.length){
sum = sum + nums[max];
max++;
while(sum >= target){
n = Math.min(n,max-min);
sum = sum - nums[min];
min++;
}
}
//是否存在n没有更新的状态:
return n == nums.length +1 ? 0 : n;
}
}
LeetCode ---- 1456
一个大字符串–固定长度的小字符串含有元音字母的最大个数
思想:固定长度的字符串,进一个出一个,判断是否为元音
class Solution {
public int maxVowels(String s, int k) {
//将字符串--》字符数组
// char[] ch = new char[s.length()];
// for(int i = 0 ; i < s.length(); i++ ){
// ch[i] = s.charAt(i);
// }
// int min = 0 ;
// int max = min + k -1;
// int result = 0;
//首先进行固定字符串长度的计算
// int n = 0 ;
// for(int i = min ; i <= max; i++ ){
// n = n + Bijiao(ch[i]);
// }
// result = Math.max(result,n);
//出去的min如果是元音则res - 1, 如果max是元音,res+1
// while(max < ch.length-1 && min <= max){
// max++;
// n = n + Bijiao(ch[max]);
// n = n - Bijiao(ch[min]);
// min++;
// result = Math.max(result,n);
// }
// return result;
//方法二:永远都是k的长度,i-k起点,i终点
// int n = s.length();
// int vowel_count = 0;
// for (int i = 0; i < k; ++i) {
// vowel_count += Bijiao(s.charAt(i));
// }
// int ans = vowel_count;
// for (int i = k; i < n; ++i) {
// vowel_count += Bijiao(s.charAt(i)) - Bijiao(s.charAt(i - k));
// ans = Math.max(ans, vowel_count);
// }
// return ans;
//哈希表
HashSet<Character> set = new HashSet<>();
set.add('a');
set.add('e');
set.add('i');
set.add('o');
set.add('u');
int res = 0 ;
int count = 0;
for(int i = 0 ; i < k; i++){
char temp = s.charAt(i);
if(set.contains(temp)){
count++;
}
}
res = Math.max(res,count);
for(int i = k; i < s.length(); i++){
char out = s.charAt(i - k);
char in = s.charAt(i);
if(set.contains(out)){
count--;
}
if(set.contains(in)){
count++;
}
res = Math.max(res,count);
}
return res;
}
// public static int Bijiao(char ch){
// return ((ch == 'a') || (ch == 'e') ||(ch == 'i') ||(ch == 'o') ||(ch == 'u') ) ? 1 : 0;
// }
}