600th Problem Solved
I wanted problem 600th to be a hard problem, but after few attempts, I switched back to either an easy of medium one. Turned out this one was easy. Here it is: https://leetcode.com/problems/find-positive-integer-solution-for-a-given-equation/
Because the function is monotonic and the limits for x and y are small (x*y = O(10^6)), you can do a nested loop on x and y, pruning the search when the result of the function is greater than the given input z (again, the function is monotonic, you need to use this information).
That's it. That's it, 600th. Onto 700th now. Code is down below, cheers, ACC.
public class Solution
{
public IList<IList<int>> FindSolution(CustomFunction customfunction, int z)
{
List<IList<int>> retVal = new List<IList<int>>();
for (int x = 1; x <= 1000; x++)
{
for (int y = 1; y <= 1000; y++)
{
int val = customfunction.f(x, y);
if (val > z) break;
if (val == z)
{
retVal.Add(new List<int> { x, y });
}
}
}
return retVal;
}
}
1237. Find Positive Integer Solution for a Given Equation
Easy
Given a function
f(x, y)
and a value z
, return all positive integer pairs x
and y
where f(x,y) == z
.
The function is constantly increasing, i.e.:
f(x, y) < f(x + 1, y)
f(x, y) < f(x, y + 1)
The function interface is defined like this:
interface CustomFunction { public: // Returns positive integer f(x, y) for any given positive integer x and y. int f(int x, int y); };
For custom testing purposes you're given an integer
function_id
and a target z
as input, where function_id
represent one function from an secret internal list, on the examples you'll know only two functions from the list.
You may return the solutions in any order.
Example 1:
Input: function_id = 1, z = 5 Output: [[1,4],[2,3],[3,2],[4,1]] Explanation: function_id = 1 means that f(x, y) = x + y
Example 2:
Input: function_id = 2, z = 5 Output: [[1,5],[5,1]] Explanation: function_id = 2 means that f(x, y) = x * y
Constraints:
1 <= function_id <= 9
1 <= z <= 100
- It's guaranteed that the solutions of
f(x, y) == z
will be on the range1 <= x, y <= 1000
- It's also guaranteed that
f(x, y)
will fit in 32 bit signed integer if1 <= x, y <= 1000
Because the function is monotonic and the limits for x and y are small (x*y = O(10^6)), you can do a nested loop on x and y, pruning the search when the result of the function is greater than the given input z (again, the function is monotonic, you need to use this information).
That's it. That's it, 600th. Onto 700th now. Code is down below, cheers, ACC.
public class Solution
{
public IList<IList<int>> FindSolution(CustomFunction customfunction, int z)
{
List<IList<int>> retVal = new List<IList<int>>();
for (int x = 1; x <= 1000; x++)
{
for (int y = 1; y <= 1000; y++)
{
int val = customfunction.f(x, y);
if (val > z) break;
if (val == z)
{
retVal.Add(new List<int> { x, y });
}
}
}
return retVal;
}
}
Comments
Post a Comment