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

机试备考笔记 18/31

2025年8月18日
小结:省流,5道 Medium,22 号写完的啧啧

目录

    • LeetCode
      • 46. 全排序
      • 39. 组合总和
      • 22. 括号生成
      • 31. 下一个排序
      • 538. 把二叉搜索树转换为累加树
    • Acwing
      • xxx

LeetCode

46. 全排序

46. 全排序

秒了

class Solution {
public:vector<bool> visited;int N;vector<vector<int>> results;vector<int> NUMS;void dfs(int t, vector<int> current) {if (t == N) {results.push_back(current);return;}for (int i = 0; i < N; i++) {if (visited[i] == true) continue;visited[i] = true;current.push_back(NUMS[i]);dfs(t + 1, current);current.pop_back();visited[i] = false;}}vector<vector<int>> permute(vector<int>& nums) {N = nums.size();NUMS = nums;visited.resize(N, false);dfs(0, {}); // 我想传空的vector<int>但其实主函数不需要它,我能不能传个不声明的return results;}
};

39. 组合总和

39. 组合总和

题目
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。

Emmm 收获很大

  1. [2, 2, 3] 和 [3, 2, 2] 是一种情况,如果用常规的搜索(对于当前都 for 循环一遍可用的参数,解决不了(解决方法见后附)
  2. 搜索中,如果数量很大的 值引用 和 地址引用,后者快的多多了

在这里插入图片描述
这个搜索思路实在是太棒了,最右那支是先给我用光某,二分的路径太棒了

在这里插入图片描述
1是最开始写的 vector<int> 传递,涉及很多次 cv 操作啥的,太慢
23是改成 vector<int> & 传递 👍🏿👍🏿

class Solution {
public:vector<vector<int>> results;vector<int> CANDIDATES;int N;void dfs(int left_target, int begin_idx, vector<int> &current) {if (left_target == 0) {results.push_back(current);return;}if (begin_idx == N) return;// 跳过当前 idxdfs(left_target, begin_idx + 1, current);// 选择当前 idxif (left_target - CANDIDATES[begin_idx] >= 0) {current.push_back(CANDIDATES[begin_idx]);dfs(left_target - CANDIDATES[begin_idx], begin_idx, current);current.pop_back();}return;}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {CANDIDATES = candidates;N = candidates.size();vector<int> tmp;dfs(target, 0, tmp);return results;}
};

22. 括号生成

22. 括号生成

题目
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
在这里插入图片描述

n 组括号,2n 个位置,暴力

class Solution {
public:int N;bool is_valid(string &str) {int open = 0, close = 0;bool flag = true;for (int i = 0; i < str.length(); i++) {if (str[i] == '(') {open++;if (open > N) {flag = false;break;}} else {close++;if (close > open) {flag = false;break;}}}return flag;}vector<string> results;void generate(string &str) {if (str.length() == 2*N) {if (is_valid(str)) {results.push_back(str);// 这里存的是一份拷贝,不会再受 &str 影响}return;}cout << str << endl;str += '(';generate(str);str.pop_back();str += ')';generate(str);str.pop_back();return;}vector<string> generateParenthesis(int n) {N = n;string str;generate(str);return results;}
};

优化一下,不到最后才判断合法性(很 ez 嘛,挑衅

class Solution {
public:int N;vector<string> results;void generate(string &str, int open, int close) {if (str.length() == 2*N) {results.push_back(str);// 这里存的是一份拷贝,不会再受 &str 影响return;}// cout << str << endl;if (open + 1 <= N) {str += '(';generate(str, open + 1, close);str.pop_back();} if (close + 1 <= open) {str += ')';generate(str, open, close + 1);str.pop_back();}return;}vector<string> generateParenthesis(int n) {N = n;string str;generate(str, 0, 0);return results;}
};

31. 下一个排序

31. 下一个排序

题目
给你一个整数数组 nums ,找出 nums 的下一个排列。
必须 原地 修改,只允许使用额外常数空间。xxx

class Solution {
public:void nextPermutation(vector<int>& nums) {next_permutation(nums.begin(), nums.end());}
};

字典序是被玩明白了,太厉害了这个题解(所以我选择STL 🤭

在这里插入图片描述

class Solution {
public:void nextPermutation(vector<int>& nums) {int i = nums.size() - 2;while (i >= 0 && nums[i] >= nums[i + 1]) {i--;}if (i >= 0) {int j = nums.size() - 1;while (j >= 0 && nums[i] >= nums[j]) {j--;}swap(nums[i], nums[j]);}reverse(nums.begin() + i + 1, nums.end());}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/next-permutation/solutions/479151/xia-yi-ge-pai-lie-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

538. 把二叉搜索树转换为累加树

538. 把二叉搜索树转换为累加树

题目
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。在这里插入图片描述

democlass Solution {
public:int up2now = 0;void dfs(TreeNode* fa) {if (fa == nullptr) return;dfs(fa->right);fa->val += up2now;up2now = fa->val;dfs(fa->left);return;}TreeNode* convertBST(TreeNode* root) {dfs(root);return root;}
};

Acwing

xxx

http://www.dtcms.com/a/344083.html

相关文章:

  • 使用 JS 渲染页面并导出为PDF 常见问题与修复
  • Laravel 使用阿里云OSS S3 协议文件上传
  • 高效稳定的仁懋MOSFET系列,打造卓越服务器电源
  • 【C++闯关笔记】封装②:友元与模板
  • git新建项目如何推送到远程仓库
  • 深度学习②【优化算法(重点!)、数据获取与模型训练全解析】
  • 医疗AI中的电子病历智能化:Model Context Protocol使用从规则编码到数据涌现
  • 齐次变换矩阵的逆变换:原理与SymPy实现
  • 零音乐基础想创作?通过cpolar,ACE-Step远程编曲如此简单
  • Gauth-字节在海外推出的AI学习辅助应用
  • FFmpeg添加水印
  • 学习嵌入式第三十五天
  • PCB电路设计学习2 元件原理图封装的添加 手工设计元件封装
  • LeetCode100 -- Day4
  • webpack开发模式与生产模式(webpack --mode=development/production“, )
  • 如何修复“DNS服务器未响应”错误
  • OpenHarmony子系统介绍
  • LLM实践系列:利用LLM重构数据科学流程01
  • 数据分析专栏记录之 -基础数学与统计知识 2 概率论基础与python
  • OpenHands:开源AI软件开发代理平台的革命性突破
  • 密码管理中Null 密码
  • 第七章 愿景22 超级丹项目汇报
  • 算法第五十三天:图论part04(第十一章)
  • Spring Boot+Docker+Kubernetes 云原生部署实战指南
  • LLM实践系列:利用LLM重构数据科学流程03- LLM驱动的数据探索与清洗
  • Windows应急响应一般思路(一)
  • [激光原理与应用-317]:光学设计 - Solidworks - 零件、装配体、工程图
  • VTK学习笔记3:曲线与曲面源
  • 闲置笔记本链接硬盘盒充当Windows NAS 网易UU远程助力数据读取和处理
  • 全球电商业财一体化趋势加速,巨益科技助力品牌出海精细化运营