额外题目第3天|1382 100 116 52 649 1221 5

1382 用迭代遍历把1382又做了一遍 中序遍历树再记一遍

这次的中序遍历总结:重点在curr不是每次pop的时候更新 而是要作为一个全局变量记录

while里面都用if else 不要再用while

容易出现的bug是 在左节点遍历完之后,在vec加入中节点时又去判断左节点的问题 -> 放到vec之后只看右节点 所以要用if else把这两种隔开 加入到vec之后就让curr=curr->right

如果有左就一直放 curr=curr->left 

class Solution {
private:vector<int> vec;void traversal(TreeNode* root) {stack<TreeNode*> stack;TreeNode* curr = root;while (curr!=nullptr || !stack.empty()) {if (curr!=nullptr) {stack.push(curr);curr = curr->left;}else {curr = stack.top();stack.pop();vec.push_back(curr->val);curr = curr->right;}}/* for (int i=0; i<vec.size(); i++) {cout<<vec[i]<<" ";} */}TreeNode* get_tree(vector<int> &vec, int start, int end) {if (start==end) return nullptr;int mid = (start+end)/2;TreeNode* root = new TreeNode(vec[mid]);root->left = get_tree(vec, start, mid);root->right = get_tree(vec, mid+1, end);return root; }
public:TreeNode* balanceBST(TreeNode* root) {traversal(root);TreeNode* balanced_BST = get_tree(vec, 0, vec.size());return balanced_BST;}
};

100 用递归写 先比较是否为空(同时为空/其中一个为空/都不为空)都不为空时返回root->val相等且左右树same

class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if (p==nullptr && q==nullptr) return true;if (p && !q) return false;if (!p && q) return false;return p->val == q->val && isSameTree(p->left, q->left) && isSameTree(p->right, q->right);}
};

用迭代写 用queue 层序遍历 一个一个节点比较

class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if (p==nullptr && q==nullptr) return true;if (!p || !q) return false;queue<TreeNode*> que;que.push(p);que.push(q);while (!que.empty()) {TreeNode* curr_p = que.front();que.pop();TreeNode* curr_q = que.front();que.pop();if (curr_p->val!=curr_q->val) return false;//leftif (!curr_p->left && !curr_q->left) {}else if (!curr_p->left || !curr_q->left) return false;else {que.push(curr_p->left);que.push(curr_q->left);}//rightif (!curr_p->right && !curr_q->right) {}else if (!curr_p->right || !curr_q->right) return false;else {que.push(curr_p->right);que.push(curr_q->right);}}return true;}
};

116 用层序遍历 queue来写 count记录每一层的个数 挨个遍历 连next 再放入左右节点

class Solution {
public:Node* connect(Node* root) {queue<Node*> que;if (root!=NULL) que.push(root);while (!que.empty()) {int count = que.size();Node* pre = NULL;for (int i=0; i<count; i++) {Node* curr = que.front(); que.pop();if (curr->left) que.push(curr->left);if (curr->right) que.push(curr->right);if (pre) pre->next = curr;pre = curr;}            }return root;}
};

52 N皇后 回溯写 虽然是困难题但是用回溯模版思路很清晰

回溯时一排一排的放 排数是传递的值 所以遍历所有的列 能放(check函数判断的)就先放着然后准备放下一行 如果放不了就撤回当前

终止条件是已经放完所有行 说明已经完美放完 此时只需要计数就好 

class Solution {
private: int count=0;bool canPut (vector<vector<int>>& board, int x, int y) {int n = board.size();//check this columnfor (int i=0; i<=x; i++) {if (board[i][y]==1) return false;}    for (int i=0; i<=x; i++) {//check 45 degreeif (y+i<n && board[x-i][y+i]==1) return false;//check 135 degreeif (y-i>=0 && board[x-i][y-i]==1) return false;}return true;}void backtracking(vector<vector<int>>& board, int row) {if (row==board.size()) {count++;return;}for (int i=0; i<board[0].size(); i++) {if (canPut(board, row, i)) {board[row][i]=1;backtracking(board, row+1);board[row][i]=0;}}}
public:int totalNQueens(int n) {vector<vector<int>> board(n, vector<int>(n,0));backtracking(board, 0);return count;}
};

649 题意很绕 一开始没看清楚题

禁止任意一名参议员的权利 && 使之在这一轮和随后的几轮中丧失所有的权利

class Solution {
public:string predictPartyVictory(string senate) {int count_D=0;int count_R=0;for (int i=0; i<senate.size(); i++) {if (senate[i]=='D') count_D++;if (senate[i]=='R') count_R++;}for (int i=0; count_D>0 && count_R>0; i++) {if (i==senate.size()) i=0;if (senate[i]=='R') {int j=i+1;while (senate[j%senate.size()]!='D')  j++;senate[j%senate.size()]=' ';count_D--;}else if (senate[i]=='D') {int j=i+1;while(senate[j%senate.size()]!='R') j++;senate[j%senate.size()]=' ';count_R--;}}if (count_D==0) return "Radiant";return "Dire";}    
};

1221 贪心算法 遇到L和R数量相同时就计数+1

class Solution {
public:int balancedStringSplit(string s) {int result = 0;int count=0;for (int i=0; i<s.size(); i++) {if (s[i]=='R') count++;else count--;if (count==0) result++;}return result;}
};

5 回文子串用动态规划 

dp数组 pal[i][j] 表示从i到j这段substr是否是回文子串

初始化是所有i和j相等时的pal为true

递归公式是当 i 和 j 所指相同时 pal[i][j]=pal[i+1][j-1] 考虑特殊情况 j-i==1

遍历顺序是i从后往前 j从前往后 始终保持j>i

class Solution {
public:string longestPalindrome(string s) {vector<vector<bool>> pal(s.size(), vector<bool>(s.size(), false));for (int i=0; i<s.size(); i++) pal[i][i]=true;int longest_len=1;string result = string(1,s[0]);for (int i=s.size()-2; i>=0; i--) {for (int j=i+1; j<s.size(); j++) {if (s[i]==s[j] && (j==i+1 || pal[i+1][j-1]==true)) {pal[i][j]=true;if (j-i+1>longest_len) {longest_len=j-i+1;result = s.substr(i, j-i+1);}} }}return result;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/17399.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes之NetworkPolicy

一、背景 如果希望在OSI模型中第三层或第四层控制网络流量&#xff0c;则应该使用NetworkPolicy这个对象&#xff1b;NetworkPolicy以应用为中心&#xff0c;主要用来控制Pod网络流量的进入和流出 二、实例说明 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadat…

cocosCreator 之 2D物理

版本&#xff1a; v3.4.0 简介 cocosCreator 内置了 2D 物理系统 和 3D 物理系统&#xff0c;开发者可以通过项目 -> 项目设置 -> 功能裁切来配置物理系统相关&#xff1a; 本文仅对2D 物理系统 做下说明和遇到的问题汇总。该物理系统在cocosCreator的功能裁切中&#x…

android 如何分析应用的内存(十三)——perfetto

android 如何分析应用的内存&#xff08;十三&#xff09; 本篇文章是native内存的最后一篇文章——perfetto perfetto简介 从2018年始&#xff0c;android开发者峰会正式推出perfetto工具。从此perfetto成为安卓最重要的工具之一。在2018年以前&#xff0c;android使用syst…

二分查找P1873 [COCI2011-2012#5] EKO / 砍树

P1873 [COCI2011-2012#5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这个题就是给新手练手的&#xff0c;在那个位置上在进行&#xff0c;寻找合适的砍树高度&#xff0c;下面在介绍一个二分查找的模板 int binarySearch(vector<int>& nums, int t…

微信小程序tab加列表demo

一、效果 代码复制即可使用&#xff0c;记得把图标替换成个人工程项目图片。 微信小程序开发经常会遇到各种各样的页面组合&#xff0c;本demo为list列表与tab组合&#xff0c;代码如下&#xff1a; 二、json代码 {"usingComponents": {},"navigationStyle&q…

matlab使用教程(6)—线性方程组的求解

进行科学计算时&#xff0c;最重要的一个问题是对联立线性方程组求解。在矩阵表示法中&#xff0c;常见问题采用以下形式&#xff1a;给定两个矩阵 A 和 b&#xff0c;是否存在一个唯一矩阵 x 使 Ax b 或 xA b&#xff1f; 考虑一维示例具有指导意义。例如&#xff0c;方程 …

20.3 HTML 表格

1. table表格 table标签是HTML中用来创建表格的元素. table标签通常包含以下子标签: - th标签: 表示表格的表头单元格(table header), 用于描述列的标题. - tr标签: 表示表格的行(table row). - td标签: 表示表格的单元格(table data), 通常位于tr标签内, 用于放置单元格中的…

MVC乱码问题

RequestMapping(value "insert",produces {"text/html;charsetutf-8"}) //前端响应回去加响应头&#xff0c;解决乱码问题,这个还跟JSP响应头还不一样&#xff0c;这是响应的字符串&#xff0c;纯文本&#xff0c;那个前端的是out.Writer()对象&#xff…

奥迪A3:最新款奥迪A3内饰设计及智能科技应用

奥迪A3一直以来都是奥迪的入门级车型&#xff0c;但这并不意味着它在科技和内饰方面会有所退步。最新款奥迪A3的内饰设计和智能科技应用让人们再次惊叹奥迪的创新能力。 内饰设计 奥迪A3最新款的内饰设计引入了奥迪最新的设计元素&#xff0c;比如8.8英寸的中控显示屏&#xf…

干货 ,ChatGPT 4.0插件Review Reader,秒杀一切选品神器

Hi! 大家好&#xff0c;我是专注于AI项目实战的赤辰&#xff0c;今天继续跟大家介绍另外一款GPT4.0插件Review Reader&#xff08;评论阅读器&#xff09;。 做电商领域的小伙伴们&#xff0c;都知道选品分析至关重要&#xff0c;可以说选品决定成败&#xff0c;它直接关系到产…

【深度学习】High-Resolution Image Synthesis with Latent Diffusion Models,论文

13 Apr 2022 论文&#xff1a;https://arxiv.org/abs/2112.10752 代码&#xff1a;https://github.com/CompVis/latent-diffusion 文章目录 PS基本概念运作原理 AbstractIntroductionRelated WorkMethodPerceptual Image CompressionLatent Diffusion Models Conditioning Mec…

申请软件著作权都有什么好处?

随着社会的发展&#xff0c;知识产权保护意识对于公司而言尤为重要&#xff0c;对自己的权利进行最大限度的保护&#xff0c;以防止被别有用心的人侵权。那么&#xff0c;申请软著的好处到底是什么?软著有什么用呢? 无形资产软著是一种无形的知识产权&#xff0c;是开发者智慧…

Spark-对RDD的理解

RDD是分布式弹性数据集。 RDD有五大特性&#xff1a; 一组分区&#xff0c;每个RDD都会被分为多个分区&#xff0c;这些分区运行在集群的不同节点上&#xff0c;分区数决定并行计算的数量。一个计算每个分区的函数&#xff0c;就是计算逻辑。RDD之间的依赖关系&#xff0c;就…

大数据技术之Clickhouse---入门篇---数据类型、表引擎

星光下的赶路人star的个人主页 今天没有开始的事&#xff0c;明天绝对不会完成 文章目录 1、数据类型1.1 整型1.2 浮点型1.3 布尔型1.4 Decimal型1.5 字符串1.6 枚举类型1.7 时间类型1.8 数组 2、表引擎2.1 表引擎的使用2.2 TinyLog2.3 Memory2.4 MergeTree2.4.1 Partition by分…

简单分享婚宴预订小程序怎么做

婚宴预订小程序需要具备一些功能&#xff0c;通过这些功能&#xff0c;新人可以更方便地选择婚宴场地、预订服务&#xff0c;并且更好地规划自己的婚礼。 1. 场地浏览与选择 婚宴预订小程序可以展示多个婚宴场地的照片和详细信息&#xff0c;包括容纳人数、场地设施、价格等。…

海外团队和国内团队如何使用 J2L3x 进行沟通协作

在人员分布不同地区或不同国家的情况下&#xff0c;如何进行高效的沟通和协作成为一个重要的问题。J2L3x 是一款专门为团队沟通协作而设计的工具&#xff0c;提供实时消息、语音通话、文件共享、任务管理等多种功能&#xff0c;特别适合海外团队和国内团队的协作。在本文中&…

无涯教程-Lua - Arrays(数组)

数组是对象的有序排列&#xff0c;可以是包含行集合的一维数组&#xff0c;也可以是包含多行和多列的多维数组。 在Lua中&#xff0c;数组是使用带有整数的索引表实现的。数组的大小不是固定的&#xff0c;并且可以根据无涯教程的要求(取决于内存限制)来增长。 一维数组 一维…

8.1作业

文件IO函数实现拷贝文件。子进程先拷贝后半部分&#xff0c;父进程再拷贝前半部分&#xff0c;允许使用sleep函数 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<head.h> int main(int argc, const char *argv[]) {pid_t cpidfo…

指针初阶(1)

文章目录 目录1. 指针是什么2. 指针变量的类型2.1 指针变量-整数2.2 指针变量的解引用 3. 野指针3.1 野指针成因3.2 如何规避野指针 4. 指针运算4.1 指针-整数4.2 指针-指针4.3 指针的关系运算 附&#xff1a; 目录 指针是什么指针变量的类型野指针指针运算指针和数组二级指针…

vb与EXCEL的连接

一、 VB读写EXCEL表&#xff1a; VB本身提自动化功能可以读写EXCEL表&#xff0c;其方法如下&#xff1a; 1、在工程中引用Microsoft Excel类型库&#xff1a; 从"工程"菜单中选择"引用"栏&#xff1b;选择Microsoft Excel 9.0 Object Library&#xff…