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

手机型网站免费二维码生成工具

手机型网站,免费二维码生成工具,360网站图标怎么做,网络运维管理软件一、题目 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/ 翻译一下题目 意思是,这是一个二维单调递增的函数,函数一共有 9 …

一、题目

在这里插入图片描述
在这里插入图片描述
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/

翻译一下题目

意思是,这是一个二维单调递增的函数,函数一共有 9 种,我们可以直接调用 CustomFunction 这个类来使用他定义的函数。测试用例中输入的 function_id 不在我们的考虑范围内,这个 function_id 只是决定了他具体是采用了哪一种函数来进行运算。而我们要做的事情就是,找到所有满足函数等于 target 的数值对。另外建议出题人下次好好学学语文再来出题吧。

二、C++解法

我的思路及代码

枚举

因为他给出了数据的范围,所有我们可以枚举出所有的情况,然后和 target 进行比较,一样则加入答案。

class Solution {
public:vector<vector<int>> findSolution(CustomFunction& customfunction, int z) {vector<vector<int>> ans;for(int i=1;i<1000;i++){for(int j=1;j<1000;j++){if(z==customfunction.f(i,j)){ans.push_back({i,j});}}}return ans;}
};
  • 时间复杂度:O(mn),其中 m 是 x 的取值数目,n 是 y 的取值数目
  • 空间复杂度:O(1)
枚举改进

在枚举的基础上增加了提前退出循环的条件,由于该函数是单调递增,所以当 f(x,y) = target 时,f(x,y+1) > target 是一定的,所以我们可以减少很多不必要的循环。除此之外我们还可以进行改进,可以继续往下看

class Solution {
public:vector<vector<int>> findSolution(CustomFunction& customfunction, int z) {vector<vector<int>> ans;for(int i=1;i<1000;i++){for(int j=1;j<1000;j++){if(z==customfunction.f(i,j)){ans.push_back({i,j});}if(z<customfunction.f(i,j))break;}}return ans;}
};
  • 时间复杂度:O(mn),其中 m 是 x 的取值数目,n 是 y 的取值数目
  • 空间复杂度:O(1)

双指针

由于此函数单调递增,所以我们可以采用双指针,一个遍历 x 的从前往后遍历,另外一个遍历 y 的从后往前遍历,当遇到当前的函数值小于 target 时就说明此时在 x 不变的情况下,y 已经小了,所以我们将 x++ 然后还是从上次遍历停止的位置继续开始 y 的遍历。这样可以大幅度减少搜索的次数。

class Solution {
public:vector<vector<int>> findSolution(CustomFunction& customfunction, int z) {vector<vector<int>> ans;int j=1000;for(int i=1;i<1001;i++){ for(;j>0;j--){if(z==customfunction.f(i,j))ans.push_back({i,j});if(z>customfunction.f(i,j))break;}}return ans;}
};
  • 时间复杂度:O(m+n),其中 m 是 x 的取值数目,n 是 y 的取值数目
  • 空间复杂度:O(1)

官方参考代码

二分查找

题目本质是一个查找的题目,所以可以用二分查找的办法将时间复杂度降低到 nlogn 的级别

class Solution {
public:vector<vector<int>> findSolution(CustomFunction& customfunction, int z) {vector<vector<int>> res;for (int x = 1; x <= 1000; x++) {int yleft = 1, yright = 1000;while (yleft <= yright) {int ymiddle = (yleft + yright) / 2;if (customfunction.f(x, ymiddle) == z) {res.push_back({x, ymiddle});break;}if (customfunction.f(x, ymiddle) > z) {yright = ymiddle - 1;} else {yleft = ymiddle + 1;}}}return res;}
};
  • 时间复杂度:O(mlog⁡n),其中 m 是 x 的取值数目,n 是 y 的取值数目。
  • 空间复杂度:O(1)
http://www.yayakq.cn/news/262205/

相关文章:

  • 江西网站建设与推广河北网站建设
  • 网页设计个人网站设计通州手机网站建设
  • 网站开发 源代码吾道ppt模板免费下载
  • 成都网站建设小程序北京学校线上教学
  • 网站开发的硬件环境和软件怎么写百度首页排名优化哪家专业
  • 网站建设张家港株洲建设工程造价信息网站
  • 网站设计公司排行榜wordpress被js挂马
  • 腾讯云电商网站建设北京网站开发公司哪家好
  • 网站解析错误飞猪关键词排名优化
  • 内蒙古建设厅网站官网济南企业网站搭建
  • 深圳seo推广英文seo推广
  • 网站开发框架是什么如何更改地图上的店名
  • 推广软件公司潍坊seo管理
  • 网站建设与管理教案网红营销案例
  • 做网站如何不被忽悠东营 微信网站建设
  • vultr怎么做网站广州做网站公司培训
  • 微信知彼网络网站建设wordpress主题转typecho
  • 广州企业网站制作公司张家港网站建设培训学校
  • 小区服务网站怎么做包头seo哪家专业
  • 下列哪些属于营销型网站的基础建设如何注销网站
  • 随州网站建设有限公司怎样快速安装wordpress
  • 用wordpress搭建完整网站教程自己做的网站怎么赚钱
  • 网站设计精美案例深圳的网站建设公司价格
  • 行业网站开发公司阆中网站建设01hl
  • 外贸网站设计模板合肥网站建设开发电话
  • 广陵建设局网站WordPress云虚拟空间
  • 长沙网站建设技术百度下拉框推广网站
  • 销售方案网站网站建设书本信息
  • 全球访问量最大的网站小程序互动投票
  • 国外seo做的好的网站南宁网吧