An NLogN Non-Sorting Solution
There are some solutions that take NLogN execution time that are not related to sorting (although a lot of them are). In this case, the problem is fairly simple, it requires processing the digits of a number. A number N on average has LogN digits (for example, Log(999) = 2.999, which is close to 3). Then we have to iterate over N different numbers, for a total complexity of NLogN (you can also see the time complexity calculate by LeetCode engine down below). Code is down below too. Cheers, ACC.
Total Waviness of Numbers in Range I - LeetCode
You are given two integers num1 and num2 representing an inclusive range [num1, num2].
The waviness of a number is defined as the total count of its peaks and valleys:
- A digit is a peak if it is strictly greater than both of its immediate neighbors.
- A digit is a valley if it is strictly less than both of its immediate neighbors.
- The first and last digits of a number cannot be peaks or valleys.
- Any number with fewer than 3 digits has a waviness of 0.
[num1, num2].
Example 1:
Input: num1 = 120, num2 = 130
Output: 3
Explanation:
In the range[120, 130]:120: middle digit 2 is a peak, waviness = 1.121: middle digit 2 is a peak, waviness = 1.130: middle digit 3 is a peak, waviness = 1.- All other numbers in the range have a waviness of 0.
Thus, total waviness is 1 + 1 + 1 = 3.
Example 2:
Input: num1 = 198, num2 = 202
Output: 3
Explanation:
In the range[198, 202]:198: middle digit 9 is a peak, waviness = 1.201: middle digit 0 is a valley, waviness = 1.202: middle digit 0 is a valley, waviness = 1.- All other numbers in the range have a waviness of 0.
Thus, total waviness is 1 + 1 + 1 = 3.
Example 3:
Input: num1 = 4848, num2 = 4848
Output: 2
Explanation:
Number 4848: the second digit 8 is a peak, and the third digit 4 is a valley, giving a waviness of 2.
Constraints:
1 <= num1 <= num2 <= 105
public class Solution {
public int TotalWaviness(int num1, int num2)
{
int retVal = 0;
for (int n = num1; n <= num2; n++)
retVal += CalculatePeaksAndValleys(n);
return retVal;
}
private int CalculatePeaksAndValleys(int n)
{
string str = n.ToString();
if (str.Length < 3) return 0;
int retVal = 0;
for (int i = 1; i < str.Length - 1; i++)
{
if ((str[i] > str[i - 1] && str[i] > str[i + 1]) ||
(str[i] < str[i - 1] && str[i] < str[i + 1]))
{
retVal++;
}
}
return retVal;
}
}


Comments
Post a Comment