当前位置: 首页 > news >正文

[LeetCode 1237]找出给定方程的正整数解

题目描述

题目链接:[LeetCode 1237]找出给定方程的正整数解

给你一个函数 f(x, y) 和一个目标结果 z,函数公式未知,请你计算方程 f(x,y) == z 所有可能的正整数 数对 x 和 y。满足条件的结果数对可以按任意顺序返回。

尽管函数的具体式子未知,但它是单调递增函数,也就是说:

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

函数接口定义如下:

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);
};

你的解决方案将按如下规则进行评判:

  • 判题程序有一个由 CustomFunction 的 9 种实现组成的列表,以及一种为特定的 z 生成所有有效数对的答案的方法。
  • 判题程序接受两个输入:function_id(决定使用哪种实现测试你的代码)以及目标结果 z 。
  • 判题程序将会调用你实现的 findSolution 并将你的结果与答案进行比较。
  • 如果你的结果与答案相符,那么解决方案将被视作正确答案,即 Accepted 。

示例1

输入:function_id = 1, z = 5
输出:[[1,4],[2,3],[3,2],[4,1]]
解释:function_id = 1 暗含的函数式子为 f(x, y) = x + y
以下 x 和 y 满足 f(x, y) 等于 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

示例2

输入:function_id = 2, z = 5
输出:[[1,5],[5,1]]
解释:function_id = 2 暗含的函数式子为 f(x, y) = x * y
以下 x 和 y 满足 f(x, y) 等于 5:
x=1, y=5 -> f(1, 5) = 1 * 5 = 5
x=5, y=1 -> f(5, 1) = 5 * 1 = 5

提示

  • 1 <= function_id <= 9
  • 1 <= z <= 100
  • 题目保证 f(x, y) == z 的解处于 1 <= x, y <= 1000 的范围内。
  • 在 1 <= x, y <= 1000 的前提下,题目保证 f(x, y) 是一个 32 位有符号整数。

思路分析

1.题目描述很不清晰,尤其是引入这个function_id
完全可以不用管这个function_id,其实就是告诉你我有九个这样的函数,函数都具有单调递增的性质,那我管你几个函数,只需要知道函数的性质就好了!

2.x,y都为1000,问题规模卡在n^2级别,看到单调,第一反应想到的就是二分

3.但是对于两个维度x和y来说很麻烦,所以我们可以固定一个维度,从这个维度上看,就是一个一维的单调递增函数,如图所示:固定住x,比如x=0,那么这个维度上,y就是单调递增的,所以可以通过枚举x,然后在每个维度上二分y来做,复杂度是O(nlogn) < O(n2n^2n2)
在这里插入图片描述

代码

class Solution {
public:vector<vector<int>> findSolution(CustomFunction& c, int z) {vector<vector<int>> res;//遍历xfor (int x = 1; x <= 1000; x++) {//二分yint l = 1, r = 1000;while(l < r) {int mid = (l + r) >> 1;if(c.f(x, mid) >= z) r = mid;else l = mid + 1;}//如果二分出来的点是零点,那么保存答案if(c.f(x, l) == z) res.push_back({x, l});}return res;}
};
http://www.lryc.cn/news/11539.html

相关文章:

  • 6.2 构建 RESTful 应用接口
  • 20230218英语学习
  • Linux单一服务管理systemctl
  • 【GStreamer 】 TX1中CPU和GPU解码显示海康相机RTSP流
  • 匿名内部类、Lambda表达式、方法引用对比分析
  • ESXi主机CVE-2021-21972漏洞复现安全处置建议
  • 研报精选230217
  • c++11 标准模板(STL)(std::unordered_set)(一)
  • 【C语言进阶】你听说过柔性数组吗?
  • [LeetCode]1237. 找出给定方程的正整数解
  • 【路径规划】基于A*算法和Dijkstra算法的路径规划(Python代码实现)
  • 蓝桥杯 stm32 PWM 设置占空比
  • React 合成事件理解
  • 202302|读书笔记——国图点滴
  • Linux 操作系统原理 — NUMA 架构中的多线程调度开销与性能优化
  • OpenGL - 如何理解 VAO 与 VBO 之间的关系
  • Linux中sed的使用
  • [软件工程导论(第六版)]第1章 软件工程学概述(复习笔记)
  • ISP相关
  • vTESTstudio - VT System CAPL Functions - VT2004(续1)
  • WeakMap弱引用
  • Springboot 使用quartz 定时任务 增删改查
  • 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】
  • Linux常用命令汇总
  • 1.TCP、UDP区别、TCP/IP七层、四层模型、应用层协议(计网)
  • 气敏电阻的原理,结构,分类及应用场景总结
  • 实验10 拓扑排序与最短路径2022
  • C/C++每日一练(20230218)
  • 【C语言】预编译
  • 音频信号处理笔记(一)