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

设计网站页面出现问题优化网络推广外包

设计网站页面出现问题,优化网络推广外包,新闻营销的优势,网站开发者模式下载视频给定一个不含重复数字的整数数组 nums &#xff0c;返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 1 < nums.length < 6 -10 < nu…

给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。

示例 1:

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

1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums 中的所有整数 互不相同

解法一:直接使用STL:

class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {// next_permutation函数每次产生下一个排列// 下一个排列的含义是按字典顺序下一个更大的排列// 因此需要先对nums进行从小到大排序sort(nums.begin(), nums.end());vector<vector<int>> ans;do {ans.push_back(nums);} while (next_permutation(nums.begin(), nums.end()));return ans;}
};

如果输入数组大小为n,此算法时间复杂度为O(n*n!),空间复杂度为O(1)。next_permutation函数的时间复杂度最多为O(n)。

解法二:回溯法,遍历某个排列的每一个元素,当遍历到下标i时,我们遍历所有可以放到下标i的元素,但有些元素在前面已经用过了,因此我们维护一个visited数组,如果该元素没有用过,才放到下标i:

class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> ans;unordered_set<int> visited;vector<int> current;backtrack(0, current, nums, visited, ans);return ans;}private:void backtrack(int pos, vector<int> current, vector<int> &nums, unordered_set<int> &visited, vector<vector<int>> &ans) {int sz = nums.size();if (pos == sz) {ans.push_back(current);}for (int i = 0; i < sz; ++i) {if (visited.find(nums[i]) != visited.end()) {continue;}visited.insert(nums[i]);current.push_back(nums[i]);backtrack(pos + 1, current, nums, visited, ans);current.pop_back();visited.erase(nums[i]);}}
};

如果输入数组大小为n,此算法时间复杂度为O(n*n!),空间复杂度为O(n)。backtrack函数的调用次数为O(n!),每次调用中,会循环n次。对于空间复杂度,递归深度为n,主要开销是栈空间开销和current、visited数组开销。

解法三:在解法二中,我们使用了visited数组来标记哪些元素已经被全排列过了,我们可以直接修改nums数组,当遍历到下标i时,我们可以令[0,i]的所有元素都是已经全排列过的元素,具体做法是将当前循环中要排列的元素和下标为i的元素交换:

class Solution {
public:vector<vector<int>> permute(vector<int>& nums) {vector<vector<int>> ans;backtrack(0, nums, ans);return ans;}private:void backtrack(int pos, vector<int> &nums, vector<vector<int>> &ans) {int sz = nums.size();if (pos == sz) {ans.push_back(nums);}for (int i = pos; i < sz; ++i) {swap(nums[i], nums[pos]);backtrack(pos + 1, nums, ans);swap(nums[i], nums[pos]);}}
};

如果输入数组大小为n,此算法时间复杂度为O(n*n!),空间复杂度为O(n)。backtrack函数的调用次数为O(n!),每次调用中,会循环n次。对于空间复杂度,递归深度为n,主要开销是栈空间开销。

http://www.dt0577.cn/news/572.html

相关文章:

  • 做时时彩网站平台软件宁波seo软件免费课程
  • 如何用html和css做网站外链seo
  • 网站落地页如何做网站设计的基本原则
  • 企业培训 电子商务网站建设 图片公众号seo排名优化
  • WordPress5分钟建站天津seo排名公司
  • 公司网站制作费用多少windows优化大师是什么软件
  • 网站被k如何恢复徐州百度运营中心
  • 做网站新手流程网络优化seo薪酬
  • 宁夏银川做网站的公司有哪些在广州做seo找哪家公司
  • 洛阳电商网站建设b2b平台推广
  • 网站建设客户沟通模块百度seo培训
  • 需要找做网站的国家高新技术企业查询
  • 教做详情页的网站广州搜索seo网站优化
  • 17做网店一样的网站百度导航下载2020新版语音
  • 国家电网网站制作首页关键词怎么排名靠前
  • 郑州微网站建设公司营销型网站更受用户欢迎的原因是
  • 网站怎么做h5支付网站加速
  • 网站建设的完整流程包括网络营销学校
  • 游戏软件开发公司简介西安百度关键词优化排名
  • github php 网站开发成都百度seo推广
  • 烟台高端网站建设广告投放平台都有哪些
  • 有经验的坪山网站建设百度一下百度搜索百度
  • 网站开发人员 怎么保存网络推广主要做什么
  • 网站面试通知表格怎么做培训心得体会2000字
  • 河间市做网站一个人怎么做独立站shopify
  • 建设网站公司电话号码营销策划精准营销
  • 网站建设平台设备百度网盘免费下载
  • 长沙3合1网站建设沧州网站seo公司
  • 政府网站建设 政府采购广告平台推广渠道
  • 网站建设怎么报价宁德市区哪里好玩