力扣题目训练(6)

news2024/11/16 22:01:08

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.coloradmin.cn/o/1423633.html

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

相关文章

1 月 30 日算法练习-思维和贪心

文章目录 重复字符串翻硬币乘积最大 重复字符串 思路&#xff1a;判断是否能整除&#xff0c;如果不能整除直接退出&#xff0c;能整除每次从每组对应位置中找出出现最多的字母将其他值修改为它&#xff0c;所有修改次数即为答案。 #include<iostream> using namespace …

太美医疗冲刺港交所上市:融资“数据打架”,老虎基金提前退出

1月29日&#xff0c;浙江太美医疗科技股份有限公司&#xff08;下称“太美医疗”或“太美医疗科技”&#xff09;递交招股书&#xff0c;准备在港交所主板上市。特别说明的是&#xff0c;该公司曾于2021年12月29日在上海证券交易所科创板递交上市申请。 据贝多财经了解&#x…

容器算法迭代器初识

#include<iostream> using namespace std; #include<vector> //vetor容器存放内置数据类型 void test01() {//创建了一个vector容器&#xff0c;数组 vector<int> v;//向容器中插入数据v.push_back (10);//尾插 v.push_back (20);v.push_back (30);v.push_ba…

vue-Router 路由

一、什么是路由&#xff1f; 在Web开发中&#xff0c;路由&#xff08;Routing&#xff09;是指根据用户访问的URL来决定应用程序应该显示哪个页面或者加载哪个组件的过程。简单来说&#xff0c;路由就是将不同的URL映射到不同的功能模块或页面上。当用户点击链接或者直接输入…

ADI 配合 USRP 使用的相控阵天线 cn0566

相控阵天线 在这里插入图片描述

利用Excel批量生成SQL语句

根据对应的数据库结构书写模板SQL&#xff0c;如&#xff1a; INSERT INTO Person VALUES(1,吕布,25,男,13500000001)然后选择表格后的单元格&#xff0c;并复制SQL语句&#xff08;注意最前方有一个号&#xff0c;整个SQL用 “ ” 包裹&#xff09;&#xff1a; "INSER…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-5 Canvas 绘制三角形

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Canvas 绘制三角形</title> </head><body><canvas id"cavsElem">您的浏览器不支持Canvas&#xff0c;请升级浏览器</canvas…

墨鱼AI导航系统源码/小白也能即拿即用+视频教程

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 墨鱼AI导航源码/小白也能即拿即用+视频教程,AI目前大火,估计未来3年内都将是风口。本系统墨鱼AI导航,顺着AI的风口,…

【Godot4自学手册】第十节将场景添加到TileSet绘制背景,主人公走到房子后面房子变得半透明

这节主要学习将场景添加到TileSet作为TileMap来搭建背景。同时&#xff0c;主人公进入房子后面&#xff0c;房子变得半透明&#xff0c;离开房子后房子变的不透明。 一、创建新场景 首先导入房子素材&#xff0c;最终文件系统内容如下&#xff1a; 点击新建场景按钮&#x…

Origin 2022下载安装教程,操作简单,小白也能轻松搞定,附安装包,带软件使用教程

前言 Origin是一个科学绘图、数据分析软件&#xff0c;支持各种各样的2D/3D图形&#xff0c;包括统计&#xff0c;信号处理&#xff0c;曲线拟合以及峰值分析&#xff0c;Origin具有强大的数据导入功能和多样的图形输出格式。 准备工作 1、Win7及以上系统 2、提前准备好 Or…

标注数据集 --labelimg

前言&#xff1a;我们想要训练自己的数据集时&#xff0c;通常需要自己标注数据集。无论是标注成yolo可识别的txt格式还是voc数据集的xml格式。使用labelimg标注都是一个不错的选择。 下面我们就从创建环境&#xff0c;使用labelimg进行标注两个方面来说明。 1.创建labelimg环境…

flutter 五点一点五:MaterialApp Theme一堆主题

一堆主题 大部分都是统一设置组件的默认样式的主题 具体属性基本上与相关组件一致 具体再学习组件时 说明 IconThemeData? iconTheme, // 设置icon的颜色 Appbar中的icon无效 IconThemeData primaryIconTheme, // 与primaryColor形成对比的图标主题IconThemeData accentIconT…

arcgis 如何计算线的长度和面的面积

一、线要素长度计算 1.打开线shp图层&#xff0c;右键图层-打开属性表&#xff08;CtrlT&#xff09; 2.在表选项里选添加字段 添加成功后&#xff0c;属性表多了一个新添加的字段 3.右键点击长度选择计算几何 二、面要素面积计算 面积计算跟长度计算一样&#xff0c;…

linux jenkins相关命令

1.jenkins启动命令 [rootlocalhost /]#service jenkins start 2.jenkins停止命令 [rootlocalhost /]#service jenkins stop 3.查询jenkins状态命令 [rootlocalhost /]#service jenkins status 4.重启jenkins命令 [rootlocalhost /]#service jenkins restart Jenkins默认的端口号…

WINDOWS中电源设置小工具

你可以使用WinPowerSet&#xff0c;玩CS2之前&#xff0c;把电源设置为“高性能”&#xff0c;玩后设置为“平衡”。 WinPowerSet 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1iOp29c4ica9L47t_l9lZ2w?pwdd248 提取码&#xff1a;d248 最近新配了一台12…

flutter 搜索框实现,键盘搜索按钮,清空,防抖

import package:flutter/material.dart; import package:flutter_screenutil/flutter_screenutil.dart; import package:flutter_svg/svg.dart; import package:sy_project/config/app_colors.dart; import package:sy_project/core/assets.dart;/// 搜索textview class Custom…

Qt 基础之QDataTime

Qt 基础之QDataTime 引言一、获取(设定)日期和时间二、时间戳三、时间计算 (重载运算符) 引言 QDataTime是Qt框架中用于处理日期和时间的类。它提供了操作和格式化日期、时间和日期时间组合的功能。QDataTime可以用于存储和检索日期和时间、比较日期和时间、对日期和时间执行算…

C语言字符串操作函数详解①strlen函数的讲解与三种模拟实现方法(建议三连收藏)

目录 ​编辑 前言 1.strlen函数介绍 2.模拟实现strlen 2.1计数器做法 2.2不创建临时变量&#xff0c;通过递归的方法 2.3利用两个指针相减 3.结语 前言 C语言中对字符和字符串的处理很是频繁&#xff0c;但是C语言本身是没有字符串类型的&#xff0c;字符串通常放在常量…

DC-磁盘配额(23国赛真题)

2023全国职业院校技能大赛网络系统管理赛项–模块B&#xff1a;服务部署&#xff08;WindowServer2022&#xff09; 文章目录 DC-磁盘配额题目配置步骤验证查看DC2驱动器C:\的磁盘配额&#xff0c;限制磁盘空间&#xff0c;警告等级等配置 DC-磁盘配额 题目 在DC2驱动器C:\上…

C#: form 添加窗体最小化事件,添加系统托盘图标,点击后可以打开、最小软件窗口

说明&#xff1a; 1.实现窗体在最小化后触发一个事件&#xff0c;可以去实现需要的功能。 2.最小化后软件图标出现在系统右下角的托盘串口。 3.点击托盘口的图标可以实现软件弹出窗口和最小化的切换。 1.参考办法 以下是判断C#窗体最小化到状态栏的状态的方法&#xff1a;…