LeetCode---2021/8/30
目录
- 找树左下角的值
- 长度最小的子数组
- 组合总和 III
- 只出现一次的数字 III
- 丑数
- 丑数 II
找树左下角的值
分析:
层序遍历:如果队列为空说明进行到了最后一层,返回第一个元素即可。
代码:
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:int findBottomLeftValue(TreeNode* root) {queue<TreeNode*> que;que.push(root);while(!que.empty()) {int n = que.size();vector<int> temp;for(int i = 0; i < n; i++) {TreeNode* fr = que.front();temp.push_back(fr->val);que.pop();if(fr->left) {que.push(fr->left);}if(fr->right) {que.push(fr->right);}}if(que.empty()) { //最后一层return temp[0];}}return 0;}
};
长度最小的子数组
方法一:
暴力枚举:从0开始枚举左边界,然后逐个累加判断。
代码:
class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();if(n == 0) {return 0;}int res = INT_MAX;for(int i = 0; i < n; i++) {int sum = 0;for(int j = i; j < n; j++) {sum += nums[j];if(sum >= target) {res = min(res, j - i + 1);break;}}}return res == INT_MAX ? 0 : res;}
};
方法二:
滑动窗口:初始left和right都指向0处,然后移动right,移动过程中求和,如果当前[left, right]区间和满足要求,则更新区间长度。随后left右移,移动过程中可能还是满足条件,也需要更新结果。当移动到当前区间不满足条件时left停止移动,right开始继续移动。
代码:
class Solution {public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();if(n == 0) {return 0;}int res = INT_MAX;int left = 0, right = 0;int sum = 0;while(right < n) {while(right < n && sum < target) {sum += nums[right];right++;}right--;if(sum >= target) {while(sum >= target) {res = min(res, right - left + 1);sum -= nums[left];left++;}}else {break;}right++;}return res == INT_MAX ? 0 : res;}
};
组合总和 III
分析:
回溯。
代码:
class Solution {private:vector<vector<int>> result;vector<int> path;void backtracking(int targetSum, int k, int sum, int startIndex) {if (path.size() == k) {if (sum == targetSum) {result.push_back(path);return;}}for (int i = startIndex; i <= 9; i++) {sum += i;path.push_back(i);backtracking(targetSum, k, sum, i + 1);sum -= i; // 回溯path.pop_back();}}public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(n, k, 0, 1);return result;}
};
只出现一次的数字 III
方法一:
哈希表。
代码:
class Solution {public:vector<int> singleNumber(vector<int>& nums) {unordered_map<int, int> mp;vector<int> res;for(int x : nums) {mp[x]++;}for(auto& [x, y] : mp) {if(y == 1) {res.push_back(x);}}return res;}
};
位运算:
设结果为a b,由于两个相同数异或为0,而任何数异或0为本身,所以我们将数组中所有数进行异或操作,最终结果就为a ^ b,记为ret。我们可以将所有数分成两组,所有相同的数在一组,ab在不同的一组,最终分组结果类似于:{1 1 2 2 3 3 a}和{4 4 7 7 8 8 b},这样两组异或的结果就分别为a和b。为此,我们可以以ret中某一个不为0的位x(记为00010000)与各个数进行与运算,为0分在一组为1分在另一组:两个相同的数与上0001000,其结果肯定一致所以被分在同一组,对于a b,由于位x处有ai ^ bi == 1,说明ai和bi必然一个为1一个为0,所以a b可以被分在不同组。
代码:
class Solution {public:vector<int> singleNumber(vector<int>& nums) {int a = 0, b = 0;int ret = 0;for(int x : nums) {ret ^= x; //求出所有数的异或,ret = a ^ b}int div = 1;while((div & ret) == 0) {div <<= 1; //找到ret从低位到高位的第一个1}for(int x : nums) {if(x & div) {a ^= x; //分组,每一组的异或即为答案}else {b ^= x;}}return {a, b};}
};
丑数
分析:
将数不断除以2 3 5,如果最后为1说明就是丑数,否则不是。
代码:
class Solution {public:bool isUgly(int n) {if(n == 1) {return true;}if(n <= 0) {return false;}int factors[3] = {2, 3, 5};for(int x : factors) {while(n % x == 0) {n /= x;}}return n == 1;}
};
丑数 II
分析:
思路类似于:蓝桥杯第九届【省赛C/C++ A组】T4:第几个幸运数
代码:
class Solution {public:int nthUglyNumber(int n) {int factors[3] = {2, 3, 5};priority_queue<long long, vector<long long>, greater<long long>> que;set<long long> s;que.push(1);s.insert(1);int cnt = 0, res = 0;while(true) {long long x = que.top(); //取队头que.pop();cnt++;if(cnt == n) {res = x;break;}for(int y : factors) {long long m = x * y;if(s.count(m) == 0) {s.insert(m);que.push(m);}}}return res;}
};
LeetCode---2021/8/30相关推荐
- 2021数学基础30讲扫描版 网盘(里面直接是文档,免费)
2021数学基础30讲扫描版 网盘(里面直接是文档,无需付费) 考研数学基础(数一二三通用) https://pan.baidu.com/s/1tq_GzdapBpiPxjtu7entEw 提取码:s ...
- 2021/10/30的1+X大数据Java答案
2021/10/30 步骤二 public Member() { }public Member(String name,String pwd,float score,int rank) {this.n ...
- 2021.1.30课程摘要(逻辑教育-王劲胜)
2021.1.30课程摘要 逻辑教育-13期-Python基础班-王劲胜 一.集合 二.函数(上) 三.作业讲解 逻辑教育-13期-Python基础班-王劲胜 一.集合 1.集合简介 • 集合表现形式 ...
- 2021.03.30【2021省赛】模拟 比赛总结
2021.03.30[2021省赛]模拟 比赛总结 地址: https://gmoj.net/senior/#contest/home/3350 T1: 神奇纸牌(uno) T2: 凌乱平衡树 (tr ...
- JZOJ 7036. 2021.03.30【2021省赛模拟】凌乱平衡树(平衡树单旋+权值线段树)
JZOJ 7036. 2021.03.30[2021省赛模拟]凌乱平衡树 题目大意 给出两棵Treap,大小分别为 n , m n,m n,m,每个点的 p r i o r i t y priorit ...
- LeetCode HOT 100 --- 2021/7/30
目录 在排序数组中查找元素的第一个和最后一个位置 组合总和 全排列 旋转图像 字母异位词分组 跳跃游戏 合并区间 在排序数组中查找元素的第一个和最后一个位置 分析: 二分查找:一旦查找到targe ...
- 【报告分享】2021年30+精致女性人群需求洞察:“她”经济时代科技引领精致生活.pdf(附下载链接)...
大家好,我是文文(微信号:sscbg2020),今天给大家分享腾讯营销洞察于2021年1月份发布的报告<"她"经济时代科技引领精致生活(2021年版).pdf>. 近两 ...
- LeetCode 2021 力扣杯全国秋季编程大赛(第384名)
文章目录 1. 无人机方阵 2. 心算挑战 3. 黑白翻转棋 4. 玩具套圈 5. 十字路口的交通 2021.9.11,周六 比赛之前:早上去交大看看,本科毕业10年了,由于限流,校园里没有多少回校的 ...
- 驭势科技两位青年翘楚 荣登福布斯2021年度30 Under 30榜单
本文转载自公众号:福布斯 ID: forbes_china 2021年,新世纪的第22个年头,中国正经历百年难遇的巨大变局.商业社会生态变迁.国际关系站上拐点.新冠疫情的常态化均考验人们的信心.未来怎 ...
- 程序员副业赚钱之2021版30个软件创意 第一期
创业需要一个IDEA!除非您有想法,否则您无法创业.当谈到初创公司的软件创意时,我们认识到运营公司最具挑战性的因素是提出良好的软件程序概念,这些概念具有创新性和前景,足以建立一家价值百万美元的公司.有 ...
最新文章
- kindeditor扩展粘贴截图功能修改图片上传路径并通过webapi上传图片到图片服务器...
- 解析列表中的数据python_将html数据解析成python列表进行操作
- java并发排序_Java基于fork/koin类实现并发排序
- python完全支持面向对象编程_[Python] 类与面向对象编程
- Linux下防止文件误删方法
- 【原创】“三次握手,四次挥手”你真的懂吗?
- linux联想电脑wifi密码,联想笔记本Y7000—ubuntu16.4无法开启wifi的解决办法
- 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
- 计算机启动过程过程图,计算机启动过程图文详解(一)----计算机初始化启动过程...
- 安卓手机管理_时间管理大师手机版下载-时间管理大师app下载v1.0.0 安卓最新版...
- 大型网站技术架构思维导图
- FBX格式和obj格式的区别
- latex中脚注内容不显示
- 得物购买截图生成_iPhone12订单生成器app-iPhone12订单生成器网页app免费版预约 v1.0...
- 2022-2027年中国发动机行业市场调研及未来发展趋势预测报告
- java graphics2d旋转_反转Java Graphics2D缩放和旋转坐标
- oppor11st升Android p,OPPO R11st刷机教程_OPPO R11st卡刷升级更新官方系统包
- apu运行linux,AMD发布带全新APU的新LINUX版本驱动
- Matlab 基础04 - 冒号Colon operator “:”的使用和复杂应用详析
- iOS 13 DarkMode 暗黑模式
热门文章
- 怎样把xp计算机语言改为英文,如何把windows电脑的默认语言改成英文?
- SAP FI 系列 (030) - 特别总账标记
- 阿里的CTR预测:Deep Interest Network
- java调用jasper_Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表
- win10双显示器 鼠标移动总感觉到另一屏困难
- jquery+easyui培训文档
- Java 泛型的本质——类型擦除
- 浅谈C++类与对象(一)
- 《华为项目管理法》读书笔记
- 云课堂让职业院校物联网技术应用教学更简单