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

高性能网站建设书籍开发公司岗位职责

高性能网站建设书籍,开发公司岗位职责,网站建设和网页制作,影视广告公司宣传片题目一:子集 问题描述 78. 子集 - 力扣(LeetCode) 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 示例…

题目一:子集

问题描述

78. 子集 - 力扣(LeetCode)

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10
  • nums 中的所有元素 互不相同

解题步骤

根据前面的做题经验,这一题应该比较容易AC

有没有觉得数组所有可能的子集很像我们每一层遍历的结果,

所以关于子集问题,我们需要的结果不是叶子结点,而是所有结点

那么其它代码逻辑不变,我们只需要改一下收集结果的位置即可

把result.push_back(path);这行代码从终止条件中拿出来

就表示我们每一步都会执行这一句,

空集是所有集合的子集,那么刚调用这个backtracking函数我们就会先加入[]

后面就是遍历一下就加入一下,输出顺序是纵深的,因为这里用的递归调用

对于终止条件,即用完数组所有元素,

那么我们用于指向遍历元素的startindex必然大于等于nums.size()

但其实也可以不加终止条件,因为我们的for循环会让i<nums.size(),它已经结束了

完整代码如下!

code

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums,int startindex){//返回的是每个结点result.push_back(path);if(startindex>=nums.size()){return;}for(int i=startindex;i<nums.size();i++){path.push_back(nums[i]);backtracking(nums,i+1);path.pop_back();}}vector<vector<int>> subsets(vector<int>& nums) {backtracking(nums,0);return result;}
};

题目二:子集②

问题描述

90. 子集 II - 力扣(LeetCode)

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

解题步骤

这题与上一题的区别就在于nums数组中可能包含重复元素

那么这个关键点和我们之前做过的组合总和②是一样的处理

重点就在于去重

我们需要排掉所有在同一层上相同的结果

但同时保证纵向不会被误判,因为纵向取数产生的数字重复,并不意味着答案重复

纵向是不断把子集变长的过程,加进来的都是从数组中取出的,

取出动作并不存在重复,哪怕数字一样但它不是从nums的同一位置取出的!

所以这一题我们要在单层遍历中加入去重代码即可

if(i>0 && nums[i]==nums[i-1] && used[i-1]==False)

为了方便判断重复元素,我们在主函数中会先对nums数组进行排序

那么遍历到第i个元素就可以通过 nums[i]==nums[i-1]这个代码判断是否出现重复元素

为了保证nums[i-1]合法,所以i必须大于0,

因为每次操作我们会用used数组标记数字的使用情况,

在纵向的递归中,used[i]=used[i-1]=true

但在同层当中,由于前一步存在回溯,我们的used[i-1]==false

翻译一下就是,上一层用过后放回去假装没用过

符合以上条件就是我们的重复元素,那么直接continue不需要继续执行

完整代码如下,需要注意在主函数中定义used数组和对nums数组进行排序!

code

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums,int startindex,vector<bool>& used){//返回的是每个结点result.push_back(path);for(int i=startindex;i<nums.size();i++){if(i>0 && nums[i]==nums[i-1] && used[i-1]==false){//去重continue;}path.push_back(nums[i]);used[i]=true;backtracking(nums,i+1,used);used[i]=false;path.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int>& nums) {vector<bool> used(nums.size(), false);sort(nums.begin(),nums.end());backtracking(nums,0,used);return result;}
};

题目三:非递减子序列

问题描述

491. 非递减子序列 - 力扣(LeetCode)

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。

示例 1:

输入:nums = [4,6,7,7]
输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:

输入:nums = [4,4,3,2,1]
输出:[[4,4]]

提示:

  • 1 <= nums.length <= 15
  • -100 <= nums[i] <= 100

解题步骤

这一题可以看成上一题的升级版,它在要求不重复的情况下同时要求该子序列递增

但需要注意的是这里的子序列是按照原数组排序生成的,

我们不能使用sort函数,不然结果也是不正确的

所以我们要换一种去重逻辑

但仍旧需要做到只除去同一层的重复项

不除去纵向的重复元素

那么排序不能用,used数组也就不能用了,

我们需要一个新的辅助,对于去重首选unordered_set,

可以利用find函数很快检查到是否已经出现过

那么我们在处理这一层元素前就需要先定义好这个uset

unordered_ser<int> uset;

再进入到遍历逻辑中,挨个检查元素是否符合题意

如果该元素之前已经用过,那么它必然可以在uset中找到

所以第一个不符合的情况是

if(uset.find(nums[i])!=uset.end())

要确保子序列递增,那么nums[i]不能小于当前path的最后一个元素,即path.back()

为防止出现path为空时的错误,先判断path.empty()为false

则第二个不符合情况如下

if(!path.empty() && nums[i]<path.back)

 可以合并这两种情况,continue

没有出现以上情况,则处理该结点

把nums[i]加入uset中做记录

再加入该数到path中

递归调用后回溯

uset.insert(nums[i]);

path.push_back(nums[i]);

backtracking(nums,i+1);

path.pop_back();

这里的uset不需要回溯,因为我们在每一层使用它,

如果是递归会重新定义,内容被清空不影响判断去重 

此外在加入结果到result数组中时,我们要先判断path.size()>=2,

这也是题目条件之一,要求子序列长度大于等于2

if(path.size()>=2){

        result.push_back(path);

}

组合所有代码,即可得到完整版如下方! 

code

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracking(vector<int>& nums,int startindex){if(path.size()>=2){result.push_back(path);}unordered_set<int> uset; // 使用set来对本层元素进行去重for(int i=startindex;i<nums.size();i++){if(!path.empty() && nums[i]<path.back() || uset.find(nums[i])!=uset.end())            {continue;}uset.insert(nums[i]);path.push_back(nums[i]);backtracking(nums,i+1);path.pop_back();}}vector<vector<int>> findSubsequences(vector<int>& nums) {backtracking(nums,0);return result;}
};


文章转载自:

http://TRXBuEZC.gqfjb.cn
http://oTe2LnLs.gqfjb.cn
http://n29b69zz.gqfjb.cn
http://kf1BuiVp.gqfjb.cn
http://pTNCsdQp.gqfjb.cn
http://gjv4tlME.gqfjb.cn
http://lBsyESEG.gqfjb.cn
http://DgXHQs7E.gqfjb.cn
http://h7V2EwBN.gqfjb.cn
http://kDO0i9K3.gqfjb.cn
http://38hMC2NQ.gqfjb.cn
http://OXyEtcAh.gqfjb.cn
http://pYoFjrFr.gqfjb.cn
http://nrqZ24hb.gqfjb.cn
http://sy6nv4ah.gqfjb.cn
http://lJyXYB5v.gqfjb.cn
http://w7qilM2s.gqfjb.cn
http://zJ838x9q.gqfjb.cn
http://bN8I5lnZ.gqfjb.cn
http://0vuJhuD9.gqfjb.cn
http://4WUcxNaN.gqfjb.cn
http://FpsCGFOr.gqfjb.cn
http://LpUgxnSn.gqfjb.cn
http://L5Vuk2Uy.gqfjb.cn
http://lorBZR6b.gqfjb.cn
http://r7uA1NXT.gqfjb.cn
http://QTWcdQy3.gqfjb.cn
http://DUGFtQbX.gqfjb.cn
http://e2RI4Hfb.gqfjb.cn
http://JgGAXfFA.gqfjb.cn
http://www.dtcms.com/wzjs/645456.html

相关文章:

  • 阿里云做网站买什么软件保山市建设局网站登录
  • 大连哪家公司做网站好wordpress菜单的代码
  • 怎么查公司网站有没有被收录济南比较好的网站开发公司
  • 深圳正规网站建设有男女做暖暖的视频网站
  • 东方a 网站 域名上海网站建设行业
  • 做网站的书知乎网站管理人员队伍建设有待加强
  • 网站开发 -(广告)公厂做网站需要开诚信通吗
  • 湖州猪八戒做网站常见的网站空间有哪些
  • 广州城市建设档案馆网站海报模板网
  • 漳州市龙文区建设局网站wordpress首页怎么设置
  • 昆明云南微网站制作wordpress 新页面
  • 秀山网站建设整形网站源码
  • 网站建设 石家庄深圳电子商务平台设计
  • 网站后台添加文章后怎么不显示做网站客户需求
  • 手机端网站seo上海快速建站
  • 网站建设项目规划书社团宣传怎么自己创建网址
  • 网站建设飠金手指下拉手工制作小店铺
  • 个人网站广告投放wordpress主题模板仿
  • 天津网站优化公司哪家专业做网站满屏的照片尺寸是多少
  • 北京网络网站建设价格济南市莱芜区招聘信息
  • 公司网站网络营销是什么怎么做推广和宣传平台
  • 做模板网站价格同济建筑人才网
  • 企业网站目的wordpress好用的主题
  • 汕头专业网站建设公司网站建设网络推广公司
  • 哪个网站做团购要求低点搜索网站定制公司
  • 自已如何做网站自己做的手工在哪个网站卖会更好
  • 网站建设行业分析做网站公司郑州郑州的网站建设公司哪家好
  • 网站服务器和网站备案吗做商城网站哪个好
  • 网站首页优化公司自己注册公司多少钱
  • 网站备案查询接口个人简历ppt模板