Off-by-one on range boundaries
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.
Build confidence with an intuition-first walkthrough focused on core interview patterns fundamentals.
You are given an integer array nums of length n.
An element at index i is called dominant if: nums[i] > average(nums[i + 1], nums[i + 2], ..., nums[n - 1])
Your task is to count the number of indices i that are dominant.
The average of a set of numbers is the value obtained by adding all the numbers together and dividing the sum by the total number of numbers.
Note: The rightmost element of any array is not dominant.
Example 1:
Input: nums = [5,4,3]
Output: 2
Explanation:
i = 0, the value 5 is dominant as 5 > average(4, 3) = 3.5.i = 1, the value 4 is dominant over the subarray [3].i = 2 is not dominant as there are no elements to its right. Thus, the answer is 2.Example 2:
Input: nums = [4,1,2]
Output: 1
Explanation:
i = 0, the value 4 is dominant over the subarray [1, 2].i = 1, the value 1 is not dominant.i = 2 is not dominant as there are no elements to its right. Thus, the answer is 1.Constraints:
1 <= nums.length <= 1001 <= nums[i] <= 100Problem summary: You are given an integer array nums of length n. An element at index i is called dominant if: nums[i] > average(nums[i + 1], nums[i + 2], ..., nums[n - 1]) Your task is to count the number of indices i that are dominant. The average of a set of numbers is the value obtained by adding all the numbers together and dividing the sum by the total number of numbers. Note: The rightmost element of any array is not dominant.
Start with the most direct exhaustive search. That gives a correctness anchor before optimizing.
Pattern signal: General problem-solving
[5,4,3]
[4,1,2]
Source-backed implementations are provided below for direct study and interview prep.
// Accepted solution for LeetCode #3833: Count Dominant Indices
class Solution {
public int dominantIndices(int[] nums) {
int n = nums.length;
int ans = 0;
int suf = nums[n - 1];
for (int i = n - 2; i >= 0; --i) {
if (nums[i] * (n - i - 1) > suf) {
ans++;
}
suf += nums[i];
}
return ans;
}
}
// Accepted solution for LeetCode #3833: Count Dominant Indices
func dominantIndices(nums []int) int {
n := len(nums)
ans := 0
suf := nums[n-1]
for i := n - 2; i >= 0; i-- {
if nums[i]*(n-i-1) > suf {
ans++
}
suf += nums[i]
}
return ans
}
# Accepted solution for LeetCode #3833: Count Dominant Indices
class Solution:
def dominantIndices(self, nums: List[int]) -> int:
n = len(nums)
ans = 0
suf = nums[-1]
for i in range(n - 2, -1, -1):
if nums[i] > suf / (n - i - 1):
ans += 1
suf += nums[i]
return ans
// Accepted solution for LeetCode #3833: Count Dominant Indices
// Rust example auto-generated from java reference.
// Replace the signature and local types with the exact LeetCode harness for this problem.
impl Solution {
pub fn rust_example() {
// Port the logic from the reference block below.
}
}
// Reference (java):
// // Accepted solution for LeetCode #3833: Count Dominant Indices
// class Solution {
// public int dominantIndices(int[] nums) {
// int n = nums.length;
// int ans = 0;
// int suf = nums[n - 1];
// for (int i = n - 2; i >= 0; --i) {
// if (nums[i] * (n - i - 1) > suf) {
// ans++;
// }
// suf += nums[i];
// }
// return ans;
// }
// }
// Accepted solution for LeetCode #3833: Count Dominant Indices
function dominantIndices(nums: number[]): number {
const n = nums.length;
let ans = 0;
let suf = nums[n - 1];
for (let i = n - 2; i >= 0; --i) {
if (nums[i] * (n - i - 1) > suf) {
ans++;
}
suf += nums[i];
}
return ans;
}
Use this to step through a reusable interview workflow for this problem.
Two nested loops check every pair or subarray. The outer loop fixes a starting point, the inner loop extends or searches. For n elements this gives up to n²/2 operations. No extra space, but the quadratic time is prohibitive for large inputs.
Most array problems have an O(n²) brute force (nested loops) and an O(n) optimal (single pass with clever state tracking). The key is identifying what information to maintain as you scan: a running max, a prefix sum, a hash map of seen values, or two pointers.
Review these before coding to avoid predictable interview regressions.
Wrong move: Loop endpoints miss first/last candidate.
Usually fails on: Fails on minimal arrays and exact-boundary answers.
Fix: Re-derive loops from inclusive/exclusive ranges before coding.