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;
}
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;
}
GitHub Comments