LeetCode //C - 1237. Find Positive Integer Solution for a Given Equation

1237. Find Positive Integer Solution for a Given Equation

Given a callable function f(x, y) with a hidden formula and a value z, reverse engineer the formula and return all positive integer pairs x and y where f(x,y) == z. You may return the pairs in any order.

While the exact formula is hidden, the function is monotonically increasing, i.e.:

  • f(x, y) < f(x + 1, y)
  • f(x, y) < f(x, y + 1)

The function interface is defined like this:

c 复制代码
interface CustomFunction {
public:
  // Returns some positive integer f(x, y) for two positive integers x and y based on a formula.
  int f(int x, int y);
};

We will judge your solution as follows:

  • The judge has a list of 9 hidden implementations of CustomFunction, along with a way to generate an answer key of all valid pairs for a specific z.
  • The judge will receive two inputs: a function_id (to determine which implementation to test your code with), and the target z.
  • The judge will call your findSolution and compare your results with the answer key.
  • If your results match the answer key, your solution will be Accepted.
Example 1:

Input: function_id = 1, z = 5

Output: \[1,4,2,3,3,2,4,1]

Explanation: The hidden formula for function_id = 1 is f(x, y) = x + y.

The following positive integer values of x and y make f(x, y) equal to 5:

x=1, y=4 -> f(1, 4) = 1 + 4 = 5.

x=2, y=3 -> f(2, 3) = 2 + 3 = 5.

x=3, y=2 -> f(3, 2) = 3 + 2 = 5.

x=4, y=1 -> f(4, 1) = 4 + 1 = 5.

Example 2:

Input: function_id = 2, z = 5

Output: \[1,5,5,1]

Explanation: The hidden formula for function_id = 2 is f(x, y) = x * y.

The following positive integer values of x and y make f(x, y) equal to 5:

x=1, y=5 -> f(1, 5) = 1 * 5 = 5.

x=5, y=1 -> f(5, 1) = 5 * 1 = 5.

Constraints:
  • 1 <= function_id <= 9
  • 1 <= z <= 100
  • It is guaranteed that the solutions of f(x, y) == z will be in the range 1 <= x, y <= 1000.
  • It is also guaranteed that f(x, y) will fit in 32 bit signed integer if 1 <= x, y <= 1000.

From: LeetCode

Link: 1237. Find Positive Integer Solution for a Given Equation


Solution:

Ideas:

use monotonic property with two pointers.

Start at (x=1, y=1000):

  • If f(x,y) == z, save pair, then x++, y--
  • If f(x,y) < z, increase x
  • If f(x,y) > z, decrease y
Code:
c 复制代码
#include <stdlib.h>

int** findSolution(int (*customFunction)(int, int), int z,
                   int* returnSize, int** returnColumnSizes) {
    int** ans = (int**)malloc(sizeof(int*) * 1000);
    *returnColumnSizes = (int*)malloc(sizeof(int) * 1000);
    *returnSize = 0;

    int x = 1, y = 1000;

    while (x <= 1000 && y >= 1) {
        int val = customFunction(x, y);

        if (val == z) {
            ans[*returnSize] = (int*)malloc(sizeof(int) * 2);
            ans[*returnSize][0] = x;
            ans[*returnSize][1] = y;
            (*returnColumnSizes)[*returnSize] = 2;
            (*returnSize)++;

            x++;
            y--;
        } else if (val < z) {
            x++;
        } else {
            y--;
        }
    }

    return ans;
}
相关推荐
春风解人意9 小时前
从零开始学习嵌入式P32----网络基础之TCP
c语言·网络·学习·tcp/ip
政企项目老覃12 小时前
大模型幻觉治理与自动评测:金融风控场景的落地实践
人工智能·算法·机器学习
是隼人12 小时前
buuctf-pwn inndy_echo(32位fmt)题解(学习过程持续更新)
c语言·学习·安全·pwn入门·ctf入门
淡海水12 小时前
08-03-不可变-ImmutableDictionary-TKey-TValue-与ImmutableHashSet-T-持久化哈希树
数据结构·算法·c#·哈希算法·dictionary·immutable
hansang_IR12 小时前
【题解】[APIO2023] 赛博乐园 / cyberland
c++·算法·图论
洛阳纸贵13 小时前
MATLAB-matlab基础知识
学习·算法·matlab
落羽的落羽13 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
Nil20813 小时前
leetcode 17电话号码的字母组合
算法·leetcode·职场和发展