I've found the following code for counting how many instances of the word balloon can be made for a given text. However, I have difficulty in understanding the return, and specifically the use of min() function. WHile I can understand why some of the counts are divided by two (apparently because l and o are double within the word), I can understand what is the use of the min function here?
Thanks
1 2 3 4 5 6
int maxNumberOfBalloons(string text) {
vector<int> counts(128);
for (char c : text)
counts[c]++;
return min(counts['o'] / 2, min(counts['l'] / 2, min(counts['n'], min(counts['b'], counts['a']))));
}
In leetcode. I am practicing in various problems and I looked at a solution to the counting balloon words number problem, and it kinda confused me the return part.
min(a, b) returns the lower of a or b. As used in the code, min() is nested so that b is itself a min() which has another min etc. Hence all the closing brackets at the end.
If there is say no 'a', then the minimum value for min(counts['b'], counts['a']) will be 0 as counts['a'] will be 0. This 0 will then propagate through the other min() and the result of the return will be 0.
If there is exactly 1 of n, b, a and 2 o and 2 l then the return value will be 1.
But consider balloonballoon
Then min(counts['b'], counts['a']) will be 2, which when propagated through the other min() will return the result 2 - as there are indeed 2 instances of the word balloon.
If there is say balloonbelloon
then the minimum value for min(counts['b'], ['a']) will be 1 as there is only 1 a. This is propagated through the other min() and the return value is 1 - there is only one instance of the word balloon.
Thank you seeplus! I couldn't understand the link between the number counting instances and the min function at the return. Everything's ok now. Thank you!