面试准备算法

在这里插入图片描述
枚举
答案肯定是字符串的某个前缀,然后简单直观的想法是枚举所有前缀来判断,设前缀长度lenz,前缀串的长度必然要是两个字符串长度的约数才能满足条件。

可以枚举长度,再去判断这个前缀串拼接若干次以后是否等于str1和str2。

class Solution {
    bool check(string str, string s){
        int len = s.length()/str.length();
        string ans;
        for(int i=0; i<len; i++){
            ans += str;
        }
        return ans == s;
    }
public:
    string gcdOfStrings(string str1, string str2) {
        int len1 = str1.length();
        int len2 = str2.length();
        for(int i=min(len1,len2); i>=1; i--){
            if(len1%i ==0 && len2%i==0){
                string str = str1.substr(0,i);
                if(check(str, str1) && check(str, str2)){
                    return str;
                }
            }
        }
        return "";
    }
};

拥有最多糖果的孩子

给一个数组candies和一个整数extraCandies。

class Solution {
public:
    vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
        int n = candies.size();
        vector<bool> res(n,false);
        int max_candy = *max_element(candies.begin(), candies.end());
        for(int i=0; i<n; i++){
            res[i] = ((candies[i] + extraCandies) >= max_candy);
        }
        return res;
    }
};

除自身以外数组的乘积

在这里插入图片描述
不能使用除法,并且需要在O(n)时间复杂度内完成此题。

左右乘积列表

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> leftSum(n,1);
        vector<int> rightSum(n,1);
        vector<int> res(n,1);
        for(int i=1; i<n; i++){
            leftSum[i] = nums[i-1]*leftSum[i-1];
        }
        for(int i=n-2; i>=0; i--){
            rightSum[i] = nums[i+1] * rightSum[i+1];
        }
        for(int i=0; i<n; i++){
            res[i] = leftSum[i] * rightSum[i];
        }
        return res;
    }
};

递增的三元子序列

如果在i>=1且i<n-1的范围内,左边存在一个元素小于nums[i],右边存在一个元素大于nums[i],则nums中存在递增的三元子序列。

class Solution {
public:
    bool increasingTriplet(vector<int>& nums) {
        int n = nums.size();
        if(n < 3){
            return false;
        }
        vector<int> minLeft(n);
        vector<int> maxRight(n);
        minLeft[0] = nums[0];
        maxRight[n-1] = nums[n-1];
        for(int i=1; i<n-2; i++){
            minLeft[i] = min(minLeft[i-1], nums[i]);
        }
        for(int i=n-2; i>=2; i--){
            maxRight[i] = max(maxRight[i+1],nums[i]);
        }
        for(int i=1; i<n-1; i++){
            if(minLeft[i-1] < nums[i] && nums[i] < maxRight[i+1]){
                return true;
            }
        }
        return false;
    }
};

压缩字符串

在这里插入图片描述

压缩字符串

为了实现原地压缩,我们可以使用双指针分别标志我们在字符串中读和写的位置。
当读指针read位于字符串的末尾,或者读指针下一个字符不相同,就认为读指针位于相同字符串的最右侧。用变量left记录左侧的位置,这样长度为right-left+1。

class Solution {
public:
    int compress(vector<char>& chars) {
        int n = chars.size();
        int write = 0;
        int left = 0;
        int read = 0;
        for(; read < n; read++){
            if(read == n-1 || chars[read] != chars[read+1]){
                chars[write++] = chars[read];
                int count = read-left+1;
                if(count > 1){
                    int anchor = write;
                    while(count){
                        chars[write++] = count%10 + '0';
                        count /= 10;
                    }
                    reverse(&chars[anchor], &chars[write]);
                }
                left = read+1;
            }
        }
        return write;
    }
};

移动零

原地移动数组,且保持相对顺序不变。
双指针
左指针表示当前已经处理好的序列的尾部,右指针指向待处理序列的头部。

右指针不断向右移动,每次右指针指向非零数,就交换左右指针,左指针向右移动。

左指针左边均是非零数,
右指针左边直到左指针均为零。

每日温度

在这里插入图片描述
暴力
对于每个元素tempaerature[i],需要找到最小的下标j,使得对应值大于它。

温度在[30,100]范围内,可以维护一个数组next记录每个温度第一次出现的下标。
便利温度列表的过程中更新next的值。

电话号码的字母组合

在这里插入图片描述

class Solution {
    void backtrace(vector<string>& combinations, const unordered_map<char,string>&phoneMap, const string digits, int index, string& combination){
        if(index == digits.size()){
            combinations.push_back(combination);
        }else{
            char digit = digits[index];
            const string& letters = phoneMap.at(digit);
            for(int i=0; i<letters.size(); i++){
                combination.push_back(letters[i]);
                backtrace(combinations, phoneMap, digits, index+1, combination);
                combination.pop_back();
            }
        }
    }
public:
    vector<string> letterCombinations(string digits) {
        vector<string> combinations;
        if(digits.empty()){
            return combinations;
        }
        unordered_map<char, string> phoneMap = {
            {'2', "abc"},
            {'3', "def"},
            {'4', "ghi"},
            {'5', "jkl"},
            {'6', "mno"},
            {'7', "pqrs"},
            {'8', "tuv"},
            {'9', "wxyz"}
        };
        string combination;
        backtrace(combinations, phoneMap, digits, 0, combination);
        return combinations;
    }
};

删除二叉搜索树中的节点

需要保证二叉搜索树的性质不变。
二叉搜索树有以下性质:

  • 左子树的所有结点(如果有)的值均小于当前节点的值;
  • 右子树的所有节点(如果有)的值均大于当前节点的值;
  • 左子树和右子树均为二叉搜索树。
TreeNode *successor = root->right;
while(successor->left){
	successor = successor->left;
}
root->right = deleteNode(root->right, successor->val);
successor->left = root->left;
sucessor->right = root->right;

二叉树的最大深度

二叉树的最大深度从根节点到最远叶子结点的最长路径上的节点数。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高德地图基于Three开发三维流动管线。

先看效果 废话少说直接上干货,整体思路通过高德地图的GLCustomLayer图层加载Three三维管线。 第一步将管线经纬度转成三维空间经纬度 GLCustomLayer = new (window as any).AMap.GLCustomLayer({zIndex: 120,visible: true,init: (gl: any) => {initThree(gl);// burialDe…

idea Error running ‘Application‘

1、Error running ‘Application’ Error running ApplicationError running Application. Command line is too long.Shorten the command line via JAR manifest or via a classpath file and rerun.找到 .idea/libraies/workspace.xml 中的 PropertiesComponent 属性&#…

ICRA 2024 混变刚度的仿人软体手指实现多模式抓取

ICRA 2024 发表了"用于多模式抓取的具有混合可变刚度机制的仿生软指 "的研究工作。核心思想是利用记忆合金的形状记忆效应&#xff0c;构建结构简化、功能多样的柔性手指&#xff0c;从而实现更高效的多模式抓取。 与传统的刚性夹爪相比&#xff0c;柔性软体夹爪具有…

阿里巴巴找黄金宝箱(IV)

系列文章目录 本人最近再练习算法&#xff0c;所以会发布自己的解题思路&#xff0c;希望大家多指教 文章目录 系列文章目录前言一、题目描述二、输入描述三、输出描述四、java代码五、测试用例 前言 一、题目描述 贫如洗的椎夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现…

CICD相关概念简单理解——筑梦之路

CI/CD 是现代软件开发流程中的关键实践&#xff0c;它代表着持续集成&#xff08;Continuous Integration&#xff09;和持续部署&#xff08;Continuous Deployment&#xff09;或持续交付&#xff08;Continuous Delivery&#xff09;的组合。这些实践旨在帮助软件开发团队更…

Java学习 (五) 面向对象--包概念、封装、构造器

一、 package &#xff08;包&#xff09; package 包 用于指定该文件中定义的类、接口等结构 像我们之前练习的代码&#xff0c;在顶部并没有定义package的关键字&#xff0c;这种就属于无名包 1、包 &#xff08;java 库&#xff09; 在java中的包&#xff0c;是一堆类和接…

2024我们该学习大模型吗?

一、引言 在快速变化的科技行业中&#xff0c;人工智能&#xff08;AI&#xff09;大模型已成为研究和应用的热点。随着AI技术的不断进步&#xff0c;特别是在自然语言处理、计算机视觉和机器学习平台等领域&#xff0c;许多专业人士开始将目光投向AI大模型的开发和应用。 二…

Linux挂载Windows共享文件

一、Windows共享目录 二、Linux挂载 yum install cifs-utils mkdir /aaa/ mount.cifs -o usernamexxx,passwordxxx //172.16.8.121/aaa /aaa/

【机器学习】在【PyCharm中的学习】:从【基础到进阶的全面指南】

目录 第一步&#xff1a;基础准备 1.1 Python基础 1.1.1 学习Python的基本语法 变量和数据类型&#xff1a; 1.1.2 控制流 条件语句&#xff1a; 循环语句&#xff1a; 1.1.3 函数和模块 函数&#xff1a; 模块&#xff1a; 1.2 安装PyCharm 1.2.1 下载并安装 第二…

Spring Boot 过滤器和拦截器详解

目录 Spring Boot 过滤器1.什么是过滤器2.工作机制3.实现过滤器 Spring Boot 拦截器1. 什么是拦截器2. 工作原理3.实现4.拓展&#xff08;MethodInterceptor 拦截器&#xff09;实现 过滤器和拦截器区别过滤器和拦截器应用场景过滤器拦截器 Spring Boot 过滤器 1.什么是过滤器 …

从零开始做题:LSB

1 题目 2 解题 2.1 使用stegsolve工具 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc] └─$ java -jar Stegsolve.jar 2.1.1 发现R、G、B的plane0有隐藏信息 2.1.2 提取隐藏信息 2.1.3 save bin后得到二维码 2.1.4 QR Research得到flag 3 flag cumtctf{1sb_i4_s0_Ea4y}

leetCode.92. 反转链表 II

leetCode.92. 反转链表 II 题目思路 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode …

【LeetCode:2742. 给墙壁刷油漆 + 递归 + 记忆化搜索 + dp】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

硬件实用技巧:摄像头常用的输出协议类型和输出接口类型

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/140042485 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

正念:照进乌云的阳光,改变你的人生|流静

在人生的旅途中&#xff0c;我们时常遭遇乌云密布的时刻&#xff0c;困厄与挫折如同浓重的阴霾&#xff0c;遮挡了前行的道路。然而&#xff0c;在这黑暗之中&#xff0c;总有一束名为“正念”的阳光&#xff0c;能够穿透云层&#xff0c;照亮我们的内心&#xff0c;引领我们走…

【论文阅读 Validation Free and Replication Robust Volume-based Data Valuation】

论文题目 免验证的对于复制鲁棒性的基于量的数据估值 1. 本文具体贡献 通过数据的体积形式化了数据多样性的度量&#xff0c;并在理论上和实证上证明了体积对数据估值的适用性&#xff1b;形式化了复制鲁棒性的概念&#xff0c;并设计了一种基于稳健体积&#xff08;RV&…

【网络安全的神秘世界】解决dvwa靶场报错:Illegal mix of collations for operation ‘UNION‘

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 &#x1f6a9;问题描述 当尝试执行如下 SQL 语句时&#xff1a; 1 union select schema_name,1 from information_schema.s…

不能创建第三个变量,实现两个数的交换

目录 常规实现两个数的交换&#xff08;如&#xff1a;交换变量a和变量b&#xff09; 方法一&#xff1a;加减法 方法二&#xff1a;异或操作符 常规实现两个数的交换&#xff08;如&#xff1a;交换变量a和变量b&#xff09; 创建一个临时变量tmp&#xff0c;先将其中一个…

SpringBoot 3.3.1 + Minio 实现极速上传和预览模式

统一版本管理 <properties><minio.version>8.5.10</minio.version><aws.version>1.12.737</aws.version><hutool.version>5.8.28</hutool.version> </properties><!--minio --> <dependency><groupId>io.m…

慢动作视频怎么制作?5种方法,轻松制作慢动作视频

在短视频风靡的当下&#xff0c;慢动作视频凭借其独特的视觉效果和引人入胜的节奏感&#xff0c;成为了吸引观众眼球的利器。你是否也想知道如何制作这种令人心动的慢动作视频呢&#xff1f;下面教大家5种能够制作出慢动作视频的方法&#xff0c;一起来学习下吧。 方法一&#…