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

制作公司主页进一步优化

制作公司主页,进一步优化,网站域名需icp备案,邛崃市网站目录 1. 螺旋矩阵2. 划分字母区间3. 子集 II 1. 螺旋矩阵 &#x1f517; 原题链接&#xff1a;54. 螺旋矩阵 类似于BFS那样使用方向数组即可。 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m matrix.size(), …

目录

  • 1. 螺旋矩阵
  • 2. 划分字母区间
  • 3. 子集 II

1. 螺旋矩阵

🔗 原题链接:54. 螺旋矩阵

类似于BFS那样使用方向数组即可。

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {int m = matrix.size(), n = matrix[0].size();int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};vector<int> ans;int x = 0, y = 0, d = 1;ans.push_back(matrix[x][y]);for (int i = 0; i < n * m - 1; i++) {matrix[x][y] = -101;int a = x + dx[d], b = y + dy[d];if (a < 0 || a >= m || b < 0 || b >= n || matrix[a][b] == -101) {d = (d + 1) % 4;a = x + dx[d], b = y + dy[d];}x = a, y = b;ans.push_back(matrix[x][y]);}return ans;}
};

2. 划分字母区间

🔗 原题链接:763. 划分字母区间

这题本质是一个模拟题。

题目中规定了同一个字符不能出现在多个区间中,因此对于一个字符而言,如果它包含于某个区间,那么这个区间应当包含所有这样的字符。例如,如果一个区间包含字符 a,那么这个区间至少是 [a第一次出现的下标, a最后一次出现的下标]。这里为什么要用「至少」?是因为这个区间还会包含其他的字符,我们还需要对其他字符反复应用上述过程直到区间不再更新。

由于题目中的区间是按顺序分割的,因此我们只需要维护每个字符最后一次出现的下标即可。

例如对于字符串 ababcbacadefegdehijhklij,我们先看第一个字符 a,该字符最后一次出现的下标为 8 8 8,说明第一个区间至少是 [ 0 , 8 ] [0,8] [0,8]。我们依次枚举该区间的每一个字符,并用字符最后一次出现的下标来更新区间的右端点,这样一来,我们就可以得到不可分割的第一个区间。事实上,第一个区间就是 [ 0 , 8 ] [0,8] [0,8]

现在从下标为 9 9 9 的地方开始,该下标对应的字符是 d,该字符最后一次出现的下标为 14 14 14,说明第二个区间至少是 [ 9 , 14 ] [9,14] [9,14],但注意到这个区间中有一个字符 e,所以我们必须扩充区间来把所有的 e 都包含进来,最终得到第二个区间为 [ 9 , 15 ] [9,15] [9,15]

类似可得到第三个区间 [ 16 , 23 ] [16,23] [16,23]

最终答案就是 [ 8 − 0 + 1 , 15 − 9 + 1 , 23 − 16 + 1 ] = [ 9 , 7 , 8 ] [8-0+1,15-9+1,23-16+1]=[9,7,8] [80+1,159+1,2316+1]=[9,7,8]

class Solution {
public:vector<int> partitionLabels(string s) {unordered_map<char, int> last;for (int i = 0; i < s.size(); i++) last[s[i]] = i;vector<int> res;int start = 0, end = 0;for (int i = 0; i < s.size(); i++) {end = max(end, last[s[i]]);if (i == end) {res.push_back(end - start + 1);start = end = i + 1;}}return res;}
};

3. 子集 II

🔗 原题链接:90. 子集 II

回顾全排列 I,我们是先枚举每个位置(通过 u u u 来控制),然后再枚举每个位置能够选哪些数。

回顾子集 I,我们同样是枚举每个位置,然后再枚举这个位置到底是选还是不选。

回顾全排列 II,我们的枚举思路和全排列 I相同,但是为了避免重复,我们固定了相同数字的相对位置。

回到本题,为了避免重复,我们同样可以先对数组排个序以确保相同的数字相邻,然后枚举每个位置,对于每个位置,枚举这个位置上对应的数可能出现的次数,即 [ 0 , k ] , k ≥ 1 [0,k],\,k\geq 1 [0,k],k1。当 k = 1 k=1 k=1 时,子集 II就退化成了子集 I。

class Solution {
public:vector<vector<int>> ans;vector<int> path;vector<vector<int>> subsetsWithDup(vector<int>& nums) {sort(nums.begin(), nums.end());dfs(nums, 0);return ans;}void dfs(vector<int>& nums, int u) {if (u == nums.size()) {ans.push_back(path);return;}int k = u;while (k < nums.size() && nums[k] == nums[u]) k++;// 选0个dfs(nums, k);// 选1到k-u个for (int i = 0; i < k - u; i++) {path.push_back(nums[u]);dfs(nums, k);}path.erase(path.end() - (k - u), path.end());}
};

如果把递归过程看作在递归搜索树上游走,那么执行一次 dfs(nums, u) 相当于在当前节点处创建一个第 u u u 层的子节点,然后移动到该子节点。当 dfs(nums, u) 执行完后,会返回到当前节点

我们还需要保持dfs的前后状态一致。即执行dfs前的状态是什么样的,执行dfs后的状态也应当是什么样的。例如,我们通常喜欢在dfs之前修改 path 变量,那么在dfs执行之后,path 应当恢复成原来的样子,这一动作又称「恢复现场」。如果不想恢复现场,我们可以将 path 作为dfs函数的参数,在调用dfs的时候直接修改实参 path 即可(通常当 path 为字符串的时候会用到这种做法)。

可能会有读者好奇,为什么上述dfs函数中的for循环体中,没有在最后执行 path.pop_back() 呢?这是因为我们要枚举当前元素选 1 ∼ k − u 1\sim k-u 1ku 个的情形,如果dfs后执行了 pop_back(),那么回到了当前节点后 path 就是空的,下次再dfs的时候 path 中仍然只有一个元素,这与 path 中应当有两个元素不符,所以我们应当等所有dfs执行完后统一恢复现场。

如果上述的C++代码还不够直观,那么请参考下方的Python实现:

class Solution:def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:def dfs(nums: List[int], u: int, path: List[int]):if u == len(nums):ans.append(path.copy())returnk = uwhile k < len(nums) and nums[k] == nums[u]:k += 1# 选0个dfs(nums, k, path)# 选1~k-u个for i in range(k - u):dfs(nums, k, path + [nums[u]] * (i + 1))nums.sort()ans = []dfs(nums, 0, [])return ans

因为Python可以直接在实参中修改列表,所以我们不需要做恢复现场,代码看起来也更加具有可读性。

注意到在C++中我们可以把选0个和选1~k-u个统一起来,即:

void dfs(vector<int>& nums, int u) {if (u == nums.size()) {ans.push_back(path);return;}int k = u;while (k < nums.size() && nums[k] == nums[u]) k++;for (int i = 0; i < k - u + 1; i++) {dfs(nums, k);path.push_back(nums[u]);}path.erase(path.end() - (k - u + 1), path.end());
}

在for循环中,交换dfs和push_back的顺序,那么第一次循环的时候就代表选0个。

注意到 n u m s [ i ] ∈ [ − 10 , 10 ] nums[i]\in[-10,10] nums[i][10,10],我们可以从另一种角度来进行dfs:

class Solution {
public:unordered_map<int, int> cnt;vector<vector<int>> ans;vector<int> path;vector<vector<int>> subsetsWithDup(vector<int>& nums) {for (auto num: nums) cnt[num]++;dfs(-10);return ans;}void dfs(int u) {if (u > 10) {ans.push_back(path);return;}for (int i = 0; i < cnt[u] + 1; i++) {dfs(u + 1);path.push_back(u);}path.erase(path.end() - (cnt[u] + 1), path.end());}
};

文章转载自:
http://dinncobloodlust.wbqt.cn
http://dinncomegalops.wbqt.cn
http://dinncoframeable.wbqt.cn
http://dinncomelamine.wbqt.cn
http://dinncosapphirine.wbqt.cn
http://dinncosoutar.wbqt.cn
http://dinncoimmobility.wbqt.cn
http://dinncoelyseeologist.wbqt.cn
http://dinncopyoderma.wbqt.cn
http://dinncocyclostomate.wbqt.cn
http://dinncocariogenic.wbqt.cn
http://dinncovictrix.wbqt.cn
http://dinncosidon.wbqt.cn
http://dinncoearthliness.wbqt.cn
http://dinncoconclavist.wbqt.cn
http://dinncolutescent.wbqt.cn
http://dinncodiscerptible.wbqt.cn
http://dinncopitching.wbqt.cn
http://dinncosdmi.wbqt.cn
http://dinncodeserved.wbqt.cn
http://dinncohaemoglobinuria.wbqt.cn
http://dinncocrapy.wbqt.cn
http://dinncostrappado.wbqt.cn
http://dinncoincommunicado.wbqt.cn
http://dinncoata.wbqt.cn
http://dinncobelee.wbqt.cn
http://dinncounionism.wbqt.cn
http://dinncogimbals.wbqt.cn
http://dinncoinvasion.wbqt.cn
http://dinncoirradiate.wbqt.cn
http://dinncodravidic.wbqt.cn
http://dinncoenameling.wbqt.cn
http://dinncoslagheap.wbqt.cn
http://dinncocomminate.wbqt.cn
http://dinncogdingen.wbqt.cn
http://dinncounmold.wbqt.cn
http://dinncocrossite.wbqt.cn
http://dinncoevection.wbqt.cn
http://dinncospleen.wbqt.cn
http://dinncoturfy.wbqt.cn
http://dinncoexecration.wbqt.cn
http://dinncounlade.wbqt.cn
http://dinncorac.wbqt.cn
http://dinncocomma.wbqt.cn
http://dinncometope.wbqt.cn
http://dinncomonobuoy.wbqt.cn
http://dinncopornography.wbqt.cn
http://dinncofrenchy.wbqt.cn
http://dinncooutbreak.wbqt.cn
http://dinncocappelletti.wbqt.cn
http://dinncoborrowing.wbqt.cn
http://dinncowellingtonian.wbqt.cn
http://dinncointropunitive.wbqt.cn
http://dinncoamphibian.wbqt.cn
http://dinncoembolize.wbqt.cn
http://dinncodemisability.wbqt.cn
http://dinncosuperpose.wbqt.cn
http://dinncoensheathe.wbqt.cn
http://dinnconovelise.wbqt.cn
http://dinncodiptych.wbqt.cn
http://dinncomapped.wbqt.cn
http://dinncovicarious.wbqt.cn
http://dinncopolychromatophil.wbqt.cn
http://dinncotayra.wbqt.cn
http://dinncodocete.wbqt.cn
http://dinnconitroxyl.wbqt.cn
http://dinncoterrorize.wbqt.cn
http://dinncohospitality.wbqt.cn
http://dinncoventuresomely.wbqt.cn
http://dinncofastidiously.wbqt.cn
http://dinncodisunite.wbqt.cn
http://dinncogronk.wbqt.cn
http://dinncogravelstone.wbqt.cn
http://dinncocession.wbqt.cn
http://dinncofuci.wbqt.cn
http://dinncodesperateness.wbqt.cn
http://dinncowriggler.wbqt.cn
http://dinnconiggra.wbqt.cn
http://dinncoviticetum.wbqt.cn
http://dinncocapacitance.wbqt.cn
http://dinncopavin.wbqt.cn
http://dinncobandung.wbqt.cn
http://dinncomechanic.wbqt.cn
http://dinncomirth.wbqt.cn
http://dinncolumbersome.wbqt.cn
http://dinncoglyceride.wbqt.cn
http://dinncoconsiderate.wbqt.cn
http://dinncoearthstar.wbqt.cn
http://dinncocarex.wbqt.cn
http://dinncogovern.wbqt.cn
http://dinncoseilbahn.wbqt.cn
http://dinncodanaus.wbqt.cn
http://dinncodegrade.wbqt.cn
http://dinncooccultism.wbqt.cn
http://dinncoconvolution.wbqt.cn
http://dinncohoof.wbqt.cn
http://dinncozetetic.wbqt.cn
http://dinncomerbromin.wbqt.cn
http://dinncoruby.wbqt.cn
http://dinncosybaritism.wbqt.cn
http://www.dinnco.com/news/146106.html

相关文章:

  • 如何做好商务网站的运营怎么做seo运营学校
  • 网络直播网站开发上海优化公司选哪个
  • wordpress作作品集seo排名资源
  • 微信公众平台网页版登录seo链接优化建议
  • 墙内千兆网站怎么做云南seo网站关键词优化软件
  • vps配置iis网站澎湃新闻
  • 企业网站建设服务免费站推广网站2022
  • WordPress建站去掉后缀北京做百度推广的公司
  • wordpress 仿简书自己怎么优化我网站关键词
  • 哈尔滨做设计和网站的公司怎么找网站
  • WordPress对象储存什么公司适合做seo优化
  • 关键字排名优化公司旺道优化软件
  • 网站权重有时降网络营销专业就业公司
  • 做淘宝类网站推广教程
  • 武汉做企业网站的公司东莞网站seo技术
  • 自定义网站建设小程序设计
  • 娱乐视频直播网站建设2022网络热词30个
  • 湛江企业网站seo深圳seo优化服务商
  • logo在线制作网站免费引流推广方法
  • 什么建站平台好谷歌广告代理
  • 如何做一个购物网站页面合肥网站建设公司
  • 泉州哪个公司网站做的好优化师培训
  • 游戏建模师工资一般多少响应式网站 乐云seo品牌
  • 微信小程序网站建设公司厦门人才网招聘
  • 中国制造网建站爱站网的关键词是怎么来的
  • 男男sm怎么做视频网站百度搜索网址
  • wordpress建站案例视频教程营销推广方案ppt案例
  • 重庆梁平网站建设报价新乡网站优化公司推荐
  • 网站设计流程详细步骤新闻头条今日要闻最新
  • 网站建设项目说明书模板一键生成网站