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

建设向58同城的网站河南公司网站建设

建设向58同城的网站,河南公司网站建设,网站建设课程设计实训日志,wordpress和苹果cms题目链接:https://leetcode.cn/problems/split-array-into-consecutive-subsequences/ 题目大意:给出一个非递减数列nums[],判断其是否能被分割成若干个满足以下条件的子列: 长度大于等于3元素严格递增且只相差1 子列的含义是&…

题目链接:https://leetcode.cn/problems/split-array-into-consecutive-subsequences/

题目大意:给出一个非递减数列nums[],判断其是否能被分割成若干个满足以下条件的子列:

  • 长度大于等于3
  • 元素严格递增且只相差1

子列的含义是:不改变元素的相对顺序,从原数列中抽取若干个元素组成新的数列。
分割的含义是:所有元素都会被分到某个子列,没有剩余。

思路:一开始的思路是,根据元素出现的次数,将其排列成若干个数列,比如在vector<vector<int>> subs中,subs[0]是仅出现一次的元素的数列;subs[1]是仅出现两次的元素的数列,以此类推。这样subs[][]就是一种对原数组的分割了,且保证了每个元素只出现一次。随后再对每个子列做调整,使其满足题意的两个条件。

长度大于等于3倒是不难解决,但要保证每个子列元素严格递增且增量为1并不容易。很难确定要从哪个子列中的哪个位置抽出哪个元素,放到另一个子列的哪个位置。似乎无法证明其可行性。

于是看了题解,原来用贪心做。不记录子列本身而是记录以x结尾的子列个数。

不过刚知道用贪心时我没有这么做,因为我的想法是:如果遍历到某个元素x,那么以x-1为结尾的子列应该是很多的,要挑选长度最短的那个子列才是最优的。于是在代码里多加了一层【以x-1为结尾的子列】的遍历(实际上这就是在记录子列本身了)。逻辑上应该没问题,然而时间超了…

这一版代码如下:

class Solution {
public:bool isPossible(vector<int>& nums) {map<int, vector<vector<int>>> endwithx;for (auto num : nums) {if (endwithx.find(num-1) == endwithx.end() || endwithx[num-1].size() == 0) {vector<int> tmp(1, num);endwithx[num].push_back(tmp);}else {vector<int> tgt;int min_len = endwithx[num-1][0].size(), min_idx = 0;for (int i = 1; i < endwithx[num-1].size(); i++) {auto sa = endwithx[num-1][i];if (sa.size() < min_len) {min_len = sa.size();min_idx = i;}}tgt = endwithx[num-1][min_idx];endwithx[num-1].erase(endwithx[num-1].begin()+min_idx, endwithx[num-1].begin()+min_idx+1);tgt.push_back(num);endwithx[num].push_back(tgt);}  }for (auto it = endwithx.begin(); it != endwithx.end(); it++) {for (auto sa : it->second) {if (sa.size() < 3)return false;}}return true;}
};

后来看了题解的写法,原来它记录的并不仅仅只是【以x-1为结尾的子列】,而是【以x-1为结尾且长度大于等于3的子列】。(这里注意因为x只会放到以x-1为结尾的子列后,因此第二个条件是都满足的)。也就是说,我的写法并不保证长度大于等于3,而是需要后面再判断(花费了更多时间)。而题解记录的就是长度大于等于3的子列,保证了合法性。

那么如何在放入时就确保子列长度大于等于3呢?答案是如果该元素x无法找到合适的子列插入时,它必须自己起头创造新的子列,那么又需要一个x+1和一个x+2。此时如果x+1x+2的剩余量不足了,直接返回false即可。否则,消耗一个x、一个x+1和一个x+2,组成新的一个【以x+2为结尾的子列】,显然这个子列是合法的。

完整代码

class Solution {
public:bool isPossible(vector<int>& nums) {map<int, int> cnt;map<int, int> endwithx;for (auto num : nums) {if (cnt.find(num) == cnt.end())cnt[num] = 1;else    cnt[num]++;}for (auto num : nums) {if (cnt[num]) {if (endwithx.find(num-1) == endwithx.end() || endwithx[num-1] == 0) {// create an new array starting with num, num+1, num+2if (cnt[num+1] && cnt[num+2]) {cnt[num]--;cnt[num+1]--;cnt[num+2]--;if (endwithx.find(num+2) == endwithx.end())endwithx[num+2] = 1;elseendwithx[num+2]++;       }elsereturn false;}else {cnt[num]--;endwithx[num-1]--;endwithx[num]++;}}}return true;}
};
http://www.hkea.cn/news/278697/

相关文章:

  • 做mla的网站网站优化哪家好
  • 网站注册的账号怎么注销线上营销活动有哪些
  • 国内做进口的电商网站网站推广软件哪个好
  • 谁有做那事的网站百度投诉中心入口
  • 免费单页网站在线制作沈阳seo排名优化教程
  • 廊坊网站建大型网站建站公司
  • 远程桌面做网站sem和seo区别与联系
  • 做贷款网站优化大师有用吗
  • 有没有便宜的网站制作制作网页教程
  • 医院网站制作优化关键词的方法有哪些
  • wordpress安装到网站吗泰安seo
  • 长春网站开发培训价格google play三件套
  • 做生存分析的网站有哪些国外新闻最新消息
  • 济南网站优化收费百度互联网营销
  • bootstrap响应网站模板下载发帖推广百度首页
  • 动态网站上的查询怎么做新媒体运营培训学校
  • 网站开发人员必备技能百度优化推广
  • 花都 网站建设百度推广怎么添加关键词
  • 开发公司成本部职责岗位职责和流程苏州网站建设优化
  • 湛江网站制作系统seo排名需要多少钱
  • 城乡现代社区建设seo关键词推广案例
  • 旅游网站开发外文文献关键洞察力
  • 大学生asp网站开发的实训周长沙百度快速优化
  • 黑龙江省建设网站百度投流运营
  • 网站关键词太多好不好兰州seo整站优化服务商
  • 义乌网站设计网店推广策划方案
  • 无锡网站优化工作室网站关键词排名优化推广软件
  • 长沙做网站的公司亚马逊seo什么意思
  • 仪征建设银行官方网站怎么优化一个网站
  • 那个网站可以查询美做空基金宁波网站推广平台效果好