643. Maximum Average Subarray I
public double findMaxAverage(int[] nums, int k) {

	double maxAverage = 0;
	double currentSum = 0;

	for(int i = 0; i < k; i++) currentSum += (double)nums[i];
	maxAverage = currentSum / k;

	for(int i = 1; i + k - 1 < nums.length; i++){
		currentSum -= (double)nums[i - 1];
		currentSum += (double)nums[i + k - 1];
		maxAverage = Math.max(maxAverage, currentSum / k);
	}
	return maxAverage;
}
  • return할 때만 타입 캐스팅, 평균 연산
  • i + k - 1 대신 i를 윈도우 끝으로 사용해서 단순화
public double findMaxAverage(int[] nums, int k) {
    int currentSum = 0;
    for (int i = 0; i < k; i++) currentSum += nums[i];
    int maxSum = currentSum;

    for (int i = k; i < nums.length; i++) {
        currentSum += nums[i] - nums[i - k];
        maxSum = Math.max(maxSum, currentSum);
    }

    return (double) maxSum / k;
}
1456. Maximum Number of Vowels in a Substring of Given Length
public int maxVowels(String s, int k) {

	char[] vowels = new char[]{'a', 'e', 'i', 'o', 'u'};
	int[] isVowel = new int[s.length()];
	
	int vowelCount = 0;
	for(int i = 0; i < k; i++){
		for(char c : vowels){
			if(s.charAt(i) == c) {
				isVowel[i] = 1;
				vowelCount++;
				break;
			}
		}
	}
	
	int maxVowelCount = vowelCount;
	for(int i = k; i < s.length(); i++){
		for(char c : vowels){
			if(s.charAt(i) == c) {
				isVowel[i] = 1;
				break;
			}
		}

		vowelCount += isVowel[i] - isVowel[i - k];
		maxVowelCount = Math.max(maxVowelCount, vowelCount);
	}

	return maxVowelCount;

}
  • char array 대신에 문자열을 indexOf로 탐색하면 isVowel 배열 사용하지 않아도 됨
  • 공간 복잡도 O(n) -> O(1)
public int maxVowels(String s, int k) {
    int vowelCount = 0;
    for (int i = 0; i < k; i++) {
        if ("aeiou".indexOf(s.charAt(i)) != -1) vowelCount++;
    }

    int maxVowelCount = vowelCount;
    for (int i = k; i < s.length(); i++) {
        if ("aeiou".indexOf(s.charAt(i)) != -1) vowelCount++;
        if ("aeiou".indexOf(s.charAt(i - k)) != -1) vowelCount--;
        maxVowelCount = Math.max(maxVowelCount, vowelCount);
    }

    return maxVowelCount;
}
1004. Max Consecutive Ones III
1493. Longest Subarray of 1’s After Deleting One Element