Given the grades of a student as an array, determine if the student has passed the class.
A Student has passed the class if the average of grades is 5 or more.
The average is defined as (grades[0] + grades[1] + ... + grades[n - 1]) / n
Example 1:
Input: grades = [4, 7, 5, 9, 8, 2]
Output: true
Explanation:
average = (4 + 7 + 5 + 9 + 8 + 2) / 6 =
= 35 / 6 = 5.833333333... >= 5
Example 2:
Input: grades = [4, 7, 5, 3, 8, 2]
Output: false
Explanation:
average = (4 + 7 + 5 + 3 + 8 + 2) / 6 =
= 29 / 6 = 4.83333.. < 5
The core challenge of this problem is to determine if the average of a list of grades meets a certain threshold. This is a common problem in educational software where determining pass/fail status based on grades is essential.
Potential pitfalls include not correctly calculating the sum or average, or misunderstanding the threshold condition.
To solve this problem, we can break it down into three main steps:
Let's start with a naive approach and then optimize it.
The naive approach involves iterating through the array to compute the sum, then dividing by the length to get the average, and finally checking if the average meets the threshold.
The optimized approach is essentially the same as the naive approach since the problem is straightforward and the naive approach is already optimal with O(n) time complexity.
Here is a step-by-step breakdown of the algorithm:
sum
to 0.sum
.sum
by the length of the array.true
if the average is greater than or equal to 5, otherwise return false
./**
* Function to determine if a student has passed based on their grades.
* @param {number[]} grades - Array of grades.
* @return {boolean} - True if the average grade is >= 5, otherwise false.
*/
function hasPassed(grades) {
// Step 1: Compute the sum of the grades
let sum = 0;
for (let grade of grades) {
sum += grade;
}
// Step 2: Compute the average
const average = sum / grades.length;
// Step 3: Check if the average is >= 5
return average >= 5;
}
// Example usage:
console.log(hasPassed([4, 7, 5, 9, 8, 2])); // Output: true
console.log(hasPassed([4, 7, 5, 3, 8, 2])); // Output: false
The time complexity of this approach is O(n) because we iterate through the array once to compute the sum. The space complexity is O(1) because we only use a few extra variables regardless of the input size.
Consider the following edge cases:
To test the solution comprehensively, consider the following test cases:
// Test cases
console.log(hasPassed([])); // Output: false (edge case: empty array)
console.log(hasPassed([5, 5, 5, 5, 5])); // Output: true (all grades are the same)
console.log(hasPassed([4.5, 5.5, 6.5, 7.5])); // Output: true (decimal values)
console.log(hasPassed([1, 2, 3, 4, 5])); // Output: false (average < 5)
console.log(hasPassed([10, 10, 10, 10, 10])); // Output: true (average > 5)
When approaching such problems, it's important to:
In this blog post, we discussed how to determine if a student has passed based on their grades. We broke down the problem, discussed a step-by-step approach, implemented the solution in JavaScript, and analyzed its complexity. Understanding and solving such problems is crucial for developing strong problem-solving skills.
For further reading and practice, consider the following resources: