力扣题目训练(6)

2024年1月30日力扣题目训练

  • 2024年1月30日力扣题目训练
    • 367. 有效的完全平方数
    • 374. 猜数字大小
    • 383. 赎金信
    • 99. 恢复二叉搜索树
    • 105. 从前序与中序遍历序列构造二叉树
    • 51. N 皇后

2024年1月30日力扣题目训练

2024年1月30日第六天编程训练,今天主要是进行一些题训练,包括简单题3道、中等题2道和困难题1道。对于一些经典题目的掌握还是有点小问题,需要利用我们已知的性质去完成。

367. 有效的完全平方数

链接: 完全平方数
难度: 简单
题目:
题目描述
运行示例:
运行示例
思路:
这个题试求平方,但是不能用自带的函数,需要自己写,我观察到一个数的平方根一般都小于等于这个数的一半,我的思路就是基于这一点完成的。官方的话就是采用二分法,因为这个数的平方根一定位于某一区间内,用二分法进行查找。还有其他方法大家可以点击链接查看。
代码:

class Solution {
public:bool isPerfectSquare(int num) {if( num == 1) return true;for(long i = 1; i <= num/2; i++){if(i*i == num) return true;if(i*i > num) return false;}return false;}
};

374. 猜数字大小

链接: 猜数字
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这也是在一个区间里找数的问题,所以我采用了二分法。
代码:

class Solution {
public:int guessNumber(int n) {int left = 1;int right = n;while(left <= right){int mid = left + (right - left) / 2;if(guess(mid) == 0) return mid;else if(guess(mid) == -1){right = mid - 1;}else{left = mid + 1;}}return -1;}
};

383. 赎金信

链接: 赎金信
难度: 简单
题目:
题目描述

运行示例:
运行示例

思路:
这道题就是看一个字符串中的字母是否能组成另一个字符串,我采用哈希表记录字母出现次数,然后进行对比。
代码:

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {if(ransomNote.size() > magazine.size()) return false;unordered_map<char,int> res;for(int i = 0; i < magazine.size(); i++){res[magazine[i]]++;}for(int i = 0; i < ransomNote.size(); i++){if(res[ransomNote[i]] == 0) return false;else res[ransomNote[i]]--;}return true;}
};

99. 恢复二叉搜索树

链接: 二叉搜索树
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
对于二叉搜索树,如果对其进行中序遍历,得到的值序列是递增有序的。不过我知道这条性质,但是不知道怎么搞,所以我看了官方的方法,记录这两位置然后进行交换。
代码:

class Solution {
public:void inorder(TreeNode* root, vector<int>& nums){if(root == NULL) return;inorder(root->left,nums);nums.push_back(root->val);inorder(root->right,nums);}void recover(TreeNode* root, int x, int y, int count){if(root != NULL){cout<< root->val <<endl;if(root->val == x || root->val == y){root->val = (root->val == x)? y:x;count--;if(count <= 0) return;}recover(root->left,x,y,count);recover(root->right,x,y,count);}   }void recoverTree(TreeNode* root) {if(root == NULL) return;vector<int> nums;inorder(root,nums);int index1 = -1;int index2 = -1;for(int i = 0; i < nums.size()-1; i++){if(nums[i+1] < nums[i]){index2 = i+1;if(index1 == -1){index1 = i;}else{break;}}}int x = nums[index1];int y = nums[index2];recover(root, x, y, 2);}
};

105. 从前序与中序遍历序列构造二叉树

链接: 构造二叉树
难度: 中等
题目:
题目描述

运行示例:
运行示例

思路:
二叉树前序遍历的顺序为:根左右。
二叉树中序遍历的顺序为:左根右。
根据这一性质,我采用了递归利用根结点的位置进行构造。
代码:

class Solution {
private:unordered_map<int, int> index;   
public:TreeNode* build(vector<int>& preorder, vector<int>& inorder, int pleft, int pright, int ileft, int iright){if(pleft > pright || ileft > iright) return NULL;int preorder_root = pleft;int inorder_root = index[preorder[preorder_root]];TreeNode* root = new TreeNode(preorder[preorder_root]);int size_left_tree = inorder_root - ileft;root->left = build(preorder,inorder,pleft+1,pleft+size_left_tree,ileft,inorder_root-1);root->right = build(preorder,inorder,pleft+size_left_tree+1,pright,inorder_root+1,iright);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if(preorder.size() != inorder.size() || preorder.size() == 0) return NULL;for (int i = 0; i < inorder.size(); ++i) {index[inorder[i]] = i;}return build(preorder,inorder,0,preorder.size()-1,0,preorder.size()-1);}
};

51. N 皇后

链接: N 皇后
难度: 困难
题目:
题目描述

运行示例:
运行示例

思路:
N皇后是比较经典的一类题,利用的是回溯法。
代码:
置换:

class Solution {
private:vector<vector<string>> res;
public:bool isValid(vector<string>& board,int row, int col){int n = board.size();for(int i = 0; i < n; i++){if(board[i][col] == 'Q') return false;}for (int a = row, b = col; a >= 0 && b >= 0; a--, b--) { // 左上if (board[a][b] == 'Q') return false;}for (int a = row, b = col; a >= 0 && b < n; a--, b++) { // 右上if (board[a][b] == 'Q') return false;}return true;}void backtrack(vector<string>&board,int row,int n){if(row == n) {res.push_back(board);return;}for(int i = 0; i < n; i++){if(isValid(board,row,i)){board[row][i] = 'Q';backtrack(board,row+1,n);board[row][i] = '.';}}}vector<vector<string>> solveNQueens(int n) {vector<string> board(n, string(n, '.'));backtrack(board, 0,n);return res;}
};

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

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

相关文章

分库分表已成为过去式,使用分布式数据库才是未来

当我们使用 Mysql数据库到达一定量级以后&#xff0c;性能就会逐步下降&#xff0c;而解决此类问题&#xff0c;常用的手段就是引入数据库中间件进行分库分表处理&#xff0c;比如使用 Mycat、ShadingShpere、tddl&#xff0c;但是这种都是过去式了&#xff0c;现在使用分布式数…

STM32——感应开关盖垃圾桶

STM32——感应开关盖垃圾桶 1.定时器介绍 软件定时 缺点&#xff1a;不精确、占用CPU资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); }定时器工作原理 使用精准的时基&#xff…

【C语言】整数和浮点数在内存中的存储

前言 我们都知道&#xff0c;在创建一个变量的时候&#xff0c;编译器会自动开辟一块内存空间用于存放它&#xff0c;但是对于不同的数据类型&#xff0c;它们的存储形式也会有所不同。今天就让我们一起来学习整数和浮点数在内存中的存储 1. 整数在内存中的存储 我们都知道&…

leetcode刷题(剑指offer) 10.正则表达式匹配

10.正则表达式匹配 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 示例 1&#xff1a;…

Linus Torvalds的20个事实

Linus Torvalds 是 Linux 操作系统的创造者&#xff0c;至今还在维护内核。本文是他的自传《Just for fun》的简短摘录&#xff0c;关于他个人的20个事实&#xff0c;比如他的老婆是他的学生。 Brief: Some known, some lesser known – here are 20 facts about the Linus Tor…

外汇天眼:Cryptodfmeta与Aden Markets──网恋对象热心带投资,鼓吹加码冻账拒出金

随着整个人类社会进入数字时代&#xff0c;我们愈来愈仰赖网络科技的便利性&#xff0c;由于远端工作逐渐成为趋势&#xff0c;就连社交与人际互动也开始云端化。 与此同时&#xff0c;诈骗集团也在各大社交平台申请假账号并寻找下手目标&#xff0c;并且诱骗人使用虚假的投资平…

JSON概述以及使用

1&#xff0c;JSON 1.1 概述 概念&#xff1a;JavaScript Object Notation。JavaScript 对象表示法. 如下是 JavaScript 对象的定义格式&#xff1a; {name:"zhangsan",age:23,city:"北京" } 接下来我们再看看 JSON 的格式&#xff1a; {"name&…

C++文件操作(1)

C文件操作 1.文本的写入及读取文本文件写入文本文件读取 2.二进制文件的写入及读取二进制文件写入二进制文件读取 3.小结 C也有处理文件的能力&#xff0c;其功能实现依赖文件流。文件流是C中用来处理文件输入输出的一种流类。文件流可以用于从文件中读取数据或将数据写入到文件…

uni-app小程序自定义导航栏

最近在开发一个uni-app小程序&#xff0c;用到了自定义导航栏&#xff0c;在这里记录一下实现过程&#xff1a; page.json 在对应页面路由的style中设置入"navigationStyle": "custom"取消原生导航栏&#xff0c;自定义导航栏 {"path": "…

【ARM Trace32(劳特巴赫) 使用介绍 6.1 -- 外设寄存器查看与修改】

请阅读【Trace32 ARM 专栏导读】 文章目录 外设寄存器查看与修改寄存器值修改外设寄存器查看与修改 外设寄存器的查看与修改,离不开TRACE32的外设文件(*.per),per文件一般存在于TRACE32的安装根目录下。 一般情况下,在调试时,TRACE32会根据当前选择的芯片名自动选择合适的…

正则表达式(RE)

什么是正则表达式 正则表达式&#xff0c;又称规则表达式&#xff08;Regular Expression&#xff09;。正则表达式通常被用来检索、替换那些符合某个规则的文本 正则表达式的作用 验证数据的有效性替换文本内容从字符串中提取子字符串 匹配单个字符 字符功能.匹配任意1个…

P1596 [USACO10OCT] Lake Counting S Flood Fill算法(洪水填充算法)

文章目录 题目链接题目描述解题思路算法原理实现方法复杂度分析 代码实现总结 题目链接 链接: P1596 [USACO10OCT] Lake Counting S 题目描述 解题思路 本题我在acwing和洛谷上都看到了 做这道题首先要了解一下Flood Fill 算法&#xff08;洪水填充算法&#xff09; 作为一个…