C/C++每日一练(20230511) 公共前缀、打家劫舍、三数之和

news2024/11/28 8:39:11

目录

1. 最长公共前缀  🌟

2. 打家劫舍  🌟🌟

3. 最接近的三数之和  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入:strs = ["flower","flow","flight"]
输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。

提示:

  • 0 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

出处:

https://edu.csdn.net/practice/27544135

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    string longestCommonPrefix(vector<string> &strs)
    {
        string lcp;
        if (strs.size() == 0)
            return lcp;
        int min_len = INT_MAX;
        int min_idx = 0;
        for (int i = 0; i < strs.size(); ++i)
        {
            auto &s = strs[i];
            if (s.size() < min_len)
            {
                min_len = s.size();
                min_idx = i;
            }
        }
        auto &smin = strs[min_idx];
        for (int i = 0; i < min_len; ++i)
        {
            char c = smin[i];
            int j;
            for (j = 0; j < strs.size(); ++j)
            {
                auto &cs = strs[j];
                if (c != cs[i])
                    break;
            }
            if (j == strs.size())
                lcp += c;
            else
                break;
        }
        return lcp;
    }
};

int main()
{
	Solution s;
	vector<string> strs = {"flower","flow","flight"};
	cout << s.longestCommonPrefix(strs) << endl;
	strs = {"dog","racecar","car"};
	cout << s.longestCommonPrefix(strs) << endl;
	return 0;
}

输出:

fl
  //空


2. 打家劫舍

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警

给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

示例 1:

输入:[1,2,3,1]
输出:4
解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。
偷窃到的最高金额 = 1 + 3 = 4 。

示例 2:

输入:[2,7,9,3,1]
输出:12
解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。
偷窃到的最高金额 = 2 + 9 + 1 = 12 。

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 400

出处:

https://edu.csdn.net/practice/27544136

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    int rob(vector<int> &nums)
    {
        int n = nums.size();
        if (n == 0)
        {
            return 0;
        }
        vector<long> f(n + 1);
        f[1] = nums[0];
        for (int i = 2; i <= n; ++i)
        {
            f[i] = max(f[i - 1], f[i - 2] + nums[i - 1]);
        }
        return f[n];
    }
};

int main()
{
	Solution s;
	vector<int> nums = {1,2,3,1};
	cout << s.rob(nums) << endl;
	nums = {2,7,9,3,1};
	cout << s.rob(nums) << endl;
	return 0;
}

输出:

4
12


3. 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

示例:

输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。

提示:

  • 3 <= nums.length <= 10^3
  • -10^3 <= nums[i] <= 10^3
  • -10^4 <= target <= 10^4

以下程序实现了这一功能,请你填补空白处内容:

```c++
#include <cstdlib>
class Solution
{
public:
    int threeSumClosest(vector<int> &nums, int target)
    {
        sort(nums.begin(), nums.end());
        int cur, left, right;
        cur = 0;
        int closest = nums[0] + nums[1] + nums[2];
        while (cur < nums.size() - 2)
        {
            left = cur + 1;
            right = nums.size() - 1;
            int n;
            while (left < right)
            {
                n = nums[cur] + nums[left] + nums[right];
                if (abs(target - n) < abs(target - closest))
                {
                    closest = n;
                }
                if (n == target)
                {
                    break;
                }
                ____________________________;
                else
                {
                    int t = left + 1;
                    while (t < right && nums[t] == nums[left])
                        t++;
                    left = t;
                }
            }
            int t = cur + 1;
            while (t < nums.size() && nums[t] == nums[cur])
                t++;
            cur = t;
        }
        return closest;
    }
};
```

出处:

https://edu.csdn.net/practice/27544137

代码:

#include <bits/stdc++.h>
using namespace std;
class Solution
{
public:
    int threeSumClosest(vector<int> &nums, int target)
    {
        sort(nums.begin(), nums.end());
        int cur, left, right;
        cur = 0;
        int closest = nums[0] + nums[1] + nums[2];
        while (cur < nums.size() - 2)
        {
            left = cur + 1;
            right = nums.size() - 1;
            int n;
            while (left < right)
            {
                n = nums[cur] + nums[left] + nums[right];
                if (abs(target - n) < abs(target - closest))
                {
                    closest = n;
                }
                if (n == target)
                {
                    break;
                }
                else if (n > target)
                {
                    int t = right - 1;
                    while (t > left && nums[t] == nums[right])
                        t--;
                    right = t;
                }
                else
                {
                    int t = left + 1;
                    while (t < right && nums[t] == nums[left])
                        t++;
                    left = t;
                }
            }
            int t = cur + 1;
            while (t < nums.size() && nums[t] == nums[cur])
                t++;
            cur = t;
        }
        return closest;
    }
};

int main()
{
	Solution s;
	vector<int> nums = {-1,2,1,-4};
	cout << s.threeSumClosest(nums, 1) << endl;

	return 0;
}

输出:

2


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

解决chatgpt网络错误,频繁掉线的问题,那就使用KeepChatGPT

文章目录 解决chatgpt出现An error occurred. If this issue persists please contact us through our help center at help.openai.com问题起因对比原作者github地址安装步骤浏览器要求安装油猴安装KeepChatGPT插件使用方法功能栏说明功能说明如下关于 取消审计 功能关于 调整…

centos安装docker教程

系统要求 1. 若是centos7&#xff0c;要求64位系统&#xff0c;内核版本为 3.10 以上 2. 若是centos6&#xff0c;要求64位系统&#xff0c;内核版本在2.6.32以上 安装步骤 1. cat /etc/os-release 查看系统版本&#xff0c;验证系统是否支持如下图&#xff08;我的是cento…

涉及红外的数据集

来源 红外和可见光的联合任务相关数据集 - 知乎 LLVIP Dataset(RGB-T Pedestrian Detection) Jia X, Zhu C, Li M, et al. LLVIP: A visible-infrared paired dataset for low-light vision[C]//Proceedings of the IEEE/CVF International Conference on Computer Vision. 2…

评估分类模型—混淆矩阵Confusion Matrix与评估指标

对于设计好的分类模型&#xff0c;需要大量的数据集来对其性能进行评估&#xff0c;因此了解评估指标是十分重要的。 评估分类模型的具体流程&#xff1a; 一、二分类混淆矩阵 Confusion Matrix 严格来说&#xff0c;对于二分类问题&#xff0c;没有标签&#xff0c;只有正例…

【C】模拟实现memcpy,memmove内存函数

目录 内存函数模拟实现 1、memcpy模拟实现 2、memmove模拟实现 3、测试案例代码 内存函数模拟实现 C 库函数 memcpy 从存储区 str2 复制 n 个字节到存储区 str1。这个函数在遇到\0的时候并不会停下来。如果str1和str2有任何的重叠&#xff0c;复制的结果都是未定义的。 me…

使用Notepad++对比两个文件代码方法

大家在使用Notepad的时候&#xff0c;需要对编辑的两个文件进行比较&#xff0c;找出两个文件代码的区别&#xff0c;快速进行编辑修改&#xff0c;那么Notepad如何对比文件&#xff0c;下面小编就给大家带来Notepad对比两个文件代码方法。 Notepad官方中文免费版&#xff1a;…

LinkedIn领英在什么情况下容易被封,提前学习避免进坑

领英在什么情况下容易被封 01.同一个人注册使用多个领英帐号。 02.多个人共同使用同一个领英帐号。 03.虚假资料注册领英账号&#xff0c;常见于注册领英账号的时候初始姓名随便填写或胡编乱造&#xff0c;注册时使用了网络虚拟的手机号码或邮箱等。 04.领英帐号的个人档案资料…

MySQL --- DQL --- 案例

DQL的基本语法分为五个部分已经学习完毕了&#xff0c;接下来运用所掌握的DQL语句的语法来完成两个案例。 1. 案例一 案例&#xff1a;根据需求完成员工管理的条件分页查询 分析&#xff1a;根据输入的条件&#xff0c;查询第1页数据 在员工管理的列表上方有一些查询条件&…

springMVC第一次作业及练习

1、首先我们导入网站的项目进行测试时网址直接输入教程给的localhost:8080/springmvc/index.jsp 会是一片空白&#xff0c;把jsp删掉就好。因为加上jsp会直接访问jsp页面&#xff0c;此时的页面没有被服务器处理。 2、测试无误后就开始跟教程走 两个xml文件的配置&#xff1a…

超实用的开源自动化测试框架强烈推荐

随着计算机技术人员的大量增加&#xff0c;通过编写代码来进行测试成为一种更为高效的测试方式&#xff0c;由此而诞生了以计算机语言为基础的自动化测试方案&#xff0c;当然测试工程师需要具备代码能力。 今天我们就结合当前的主流编程语言&#xff0c;分别三种环境下各自的自…

触摸屏与三菱PLC之间无线MODBUS通讯实例

在工厂里&#xff0c;触摸屏往往位于程控室内&#xff0c;作为控制多个不同位置PLC的主站设备。因为触摸屏和plc所处位置距离较为分散&#xff0c;重新铺设电缆线工期长&#xff0c;成本高&#xff0c;故采用无线方式解决触摸屏与PLC之间的通讯问题。 一、方案概述 本方案是威…

最近颁发的“吴文俊奖”,见证了中国AI走向产业之路

“任何足够先进的技术&#xff0c;初看起来都与魔法无异”——这是著名科幻作家克拉克总结的第三定律。 今年以来ChatGPT掀起的智能交互变革&#xff0c;大语言模型的智能涌现能力&#xff0c;在很多人眼里&#xff0c;真的就像魔法一样。 当然&#xff0c;大家心知肚明&#x…

环评制图丨最新导则下的生态系统、土地利用、植被覆盖、适宜生境分布图等制图

根据最新生态环境影响评价导则&#xff0c;结合生态环评内容庞杂、综合性强的特点&#xff0c;以既包括陆域、又包括水域的项目为主要案例&#xff0c;对生态环评的具体流程及所需内容进行系统阐述。利用Rstudio、Fragstats等软件分析计算生态环评中所需各种指数&#xff0c;利…

python计算分类模型的评价指标

目录 1、混淆矩阵 2、代码实现 2.1、OA 2.2、AA 2.3、kappa 2.4、用户精度(User Accuracy, UA) 2.5、生产者精度(Producer Accuracy, PA) 2.6、f1_score 2.7、混淆矩阵 2.8、分类报告 1、混淆矩阵 以二分类问题为例&#xff0c;混淆矩阵表现形式如下&#xff1a; T…

Linux系统下的文件操作

目录 一、文件理解 二、系统级的文件操作 1、打开open 2、关闭close 3、写入write 4、读取read 三、文件描述符 四、重定向 1、dup2函数 2、追加重定向 3、输入重定向 五、缓冲区 1、缓冲区存在的意义 2、缓冲区的刷新策略 一、文件理解 在Linux中&#xff0c;有…

Linux多线程(2)线程安全(同步与互斥)

1.线程安全 概念 在多线程程序中&#xff0c;涉及到了对共享资源的操作&#xff0c;则有可能导致数据的二义性&#xff0c;而线程安全指的是&#xff0c;就算对共享资源进行操作也不会导致数据二义。 总结&#xff1a;多线程中对共享资源的操作不会出现问题。 实现&#xff1a;…

【AUTOSA】

目录 一、概述 二、限制与约束 三、功能描述 3.1 网络通信模式请求的转换 3.2 当前网络通信方式的输出 3.3 外围设备的控制 3.3.1 以太网接口控制器 3.4 多网络 3.5 网络模式状态机 3.5.1 初始化 3.5.2 在亚状态ETHSM_STATE_OFFLINE中的行为 3.5.3 子状态ETHSM_STA…

深入学习MYSQL-数据操纵及视图

前言 本博客中的例子和文字大部分来源于书籍《mysql必会知识》&#xff0c;后续会根据更多的书籍不断完善此笔记。 插入操作 可以这种方式向数据库插入两条数据&#xff0c;mysql和pg都支持这种写法。在实战中我们应该更多的使用这种写法&#xff0c;因为数据库的批量操作会…

TCP之滑动窗口和流量控制

TCP 利用发送字节数和接收字节数&#xff0c;这个二元组的唯一性保证顺序。讨论下保证顺序的具体算法&#xff0c;以及如何在保证顺序的基础上&#xff0c;同时追求更高的吞吐量。——TCP 的滑动窗口算法。 TCP 作为一个传输层协议&#xff0c;最核心的能力是传输。传输需要保证…

前端CSS学习(一)

1、基础认知 CSS概述&#xff1a;CSS:层叠样式表(Cascading style sheets)CSS作用是给页面中的HTML标签设置样式&#xff0c;起到美化修饰网页的作用CSS语法规则&#xff1a;CsS写在style标签中&#xff0c;style标签一般写在head标签里面&#xff0c; title 标签下面<!DOC…