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;
}
相关推荐
GoAI13 小时前
DeepSeek Harness Memory (一)主流记忆插件总结
后端·算法·面试
Pniubi13 小时前
力扣54.螺旋矩阵
算法·leetcode·矩阵
Zwawa14 小时前
用两个按键做一个OLED菜单:先把选择和执行分开
c语言·单片机·嵌入式
choumou_M16 小时前
算法_1:由浅入深学习快速排序QuickSort
学习·算法·排序算法
Coder_Shenshen16 小时前
罗克韦尔ACD工程归档离线变量树解析
算法·c#
心仪久了会沦陷18 小时前
C语言数据结构入门——树与二叉树详解:概念、堆实现与链式遍历
c语言·数据结构·算法
小此方18 小时前
[算法实战论:动态规划]背包问题概念,01不满背包问题,01满背包问题,背包问题的滚动数组空间优化
算法·动态规划
悠仁さん19 小时前
【C++】哈希表
c++·算法·散列表
地平线开发者20 小时前
点云算法整理与常用计算模块:从数据到模型,再到工程与量化
算法·自动驾驶