牛客网面试必刷TOP101--C++详细题解

题目

  • NC65 斐波那契数列
  • NC103 反转字符串
  • NC141 判断是否为回文字符串
  • NC151 最大公约数
  • NC4 判断链表中是否有环
  • NC7 买卖股票的最好时机(一)

NC65 斐波那契数列

题目描述:
在这里插入图片描述

分析:
使用递归求解,当输入参数等于1、2时返回整数1

class Solution {
public:int Fibonacci(int n) {if(n == 1 || n == 2){return 1;}return Fibonacci(n-1) + Fibonacci(n-2);}
};

NC103 反转字符串

题目描述:
在这里插入图片描述

分析:
使用string迭代器逆向打印存入字符串返回

#include<string>
class Solution {
public:string solve(string str) {string s;string::reverse_iterator rit = str.rbegin();while(rit != str.rend()){s.push_back(*rit);++rit;}return s;}
};

NC141 判断是否为回文字符串

题目描述:
在这里插入图片描述

分析:
先找到首字符strat和最后一个字符end的位置
然后进行比较,如果不相等直接返回false
如果相等,则++start,–end
当start大于等于end时,则正常结束,跳出循环,返回true

class Solution {
public:bool judge(string str) {//首字符索引char start = 0;//最后一个字符索引char end = str.size()-1;while(start < end){if(str[start] != str[end]){return false;}++start;--end;}return true;}
};

NC151 最大公约数

题目描述:
在这里插入图片描述

分析:
定义一个变量tmp用来存储a,b中较小的数。
然后用a,b对tmp进行取余,如果有余数,则对tmp进行–操作。
直到被a,b两数整除则为a,b的最大公约数。返回该值。

class Solution {
public:int gcd(int a, int b) {int tmp = (a>b)? b:a;while(tmp){if(a%tmp == 0 && b%tmp == 0){return tmp;}--tmp;}return 1;}
};

NC4 判断链表中是否有环

题目描述:
在这里插入图片描述

分析:
定义两个指针一开始都指向头节点,区别在于步长不同,一快一慢。
slow 指针每次向后移动一个位置,而fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针在环中相遇。
如果不存在环,则fast指针会指向nullptr,则返回false

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:bool hasCycle(ListNode* head) {if (head == nullptr) {return false;} else {ListNode* fast;ListNode* slow;fast = slow = head;while (fast != nullptr && fast->next != nullptr) {fast = fast->next->next;slow = slow->next;if(fast == slow){return true;}}return false;}}
};

NC7 买卖股票的最好时机(一)

题目描述:
在这里插入图片描述

分析1(动态规划):

思路:对于每一天都有两个状态:到此为止的最大收益和是否持股。
因此用:
dp[i][0]表示第i天不持股到该天为止的最大收益,
dp[i][1]表示第i天持股,到该天为止的最大收益。
然后对于之后的每一天,都根据前一天的情况进行赋值。
如果当天不持股,有可能是前面的若干天中卖掉了或是还没买,因此到此为止的总收益和前一天相同,也有可能是当天才卖掉;
如果当天持股,有可能是前面若干天中买了股票,当天还没卖,因此收益与前一天相同,也有可能是当天买入,此时收益为负的股价。

class Solution {
public:int maxProfit(vector<int>& prices) {int n = prices.size();vector<vector<int>> dp(n, vector<int>(2, 0));//第一天不持股收益dp[0][0] = 0;//第一天持股收益dp[0][1] = -prices[0];for(int i = 1; i < n; ++i){//第i天不持股最大收益://1.前一天也不持股,前几天卖掉或者没买,收益和前一天相同//2.前一天持股,第i天当天抛出,收益为前一天持股加上当天抛出dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);//第i天持股最大收益://1.前一天不持股,第i天当天买入,收益为当天买入价格的负数//2.前一天持股,收益和前一天相同dp[i][1] = max(-prices[i], dp[i-1][1]);}//最后一天不持股,到改天为止的最大收益return dp[n-1][0];}
};

分析2(贪心思想):
思路:如果在某一天卖出了股票,那么要想收益最高,一定是它前面价格最低的那天买入的股票才可以。因此可以利用贪心思想解决,每次都将每日收入与最低价格相减维护最大值。
将第一天看成价格最低,后续遍历的时候遇到价格更低则更新价格最低
每次都比较最大收益与当日价格减去价格最低的值,选取最大值作为最大收益

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param prices int整型vector * @return int整型*/int maxProfit(vector<int>& prices) {// write code hereint n = prices.size();if(n == 0)return 0;//最大收益int maxProfit;//当天最大收益int max_td;//截至当天最低价格,将第一天看作价格最低int lessPrice = prices[0];//买入必须是卖出前一天maxProfit = 0;for(int i = 1; i < n; ++i){//第i天的最大收益,当天价格减去先前最低价格max_td = prices[i]-lessPrice;//如果第i天的最大收益比之前的大,则更新最大收益maxProfit = max(maxProfit, max_td);//如果先前最低价格大于第i天的价格,则更新最低价格//由于买入必须是卖出前一天,因此先计算第i天的最大收益后再更新最低价格lessPrice = min(lessPrice, prices[i]);}return maxProfit;}
};

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

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

相关文章

11-2 mybatis入门细节

mybatis Mybatis 单表CURD细节 ${} 与#{} 区别(面试题) ${} 拼接sql 造成sql注入 #{} 使用?占位 如果作为值, 推荐使用#{} ${} 实现一些动态排序,使用 #{column} select * from tb_userinfo order by ? desc column: id 赋值 sql: select * from tb_userinfo order by id …

第70讲:MySQL数据库全局锁的核心概念

文章目录 1.全局锁的概念2.使用全局锁的语法结构3.全局锁的基本使用 1.全局锁的概念 全局锁是对整个数据库实例添加一个锁&#xff0c;全局锁是面向整个数据库实例的&#xff0c;而不是单个数据库&#xff0c;添加锁之后这个实例就会处于只读状态&#xff0c;此时所有的数据库…

Selenium alert 弹窗处理!

页面弹窗有 3 种类型&#xff1a; alert&#xff08;警告信息&#xff09;confirm&#xff08;确认信息&#xff09;prompt&#xff08;提示输入&#xff09; 对于页面出现的 alert 弹窗&#xff0c;Selenium 提供如下方法&#xff1a; 序号方法/属性描述1accept()接受2dismis…

Unity 声音的控制

闲谈&#xff1a; 游戏开发比普通软件开发难也是有原因的&#xff0c;第一 游戏功能需求变化多样内部逻辑交错纵横&#xff0c; 而软件相对固定&#xff0c;无非也就是点击跳转、数据存储 第二&#xff0c;游戏需要很多3D数学知识、物理知识&#xff0c;最起码得有高中物理的基…

人类和 AI 能够“双向奔赴”吗? | 近匠

新技术时代已经开启&#xff0c;人类首次接触生成式人工智能&#xff0c;使用对话的方式和大语言模型交互&#xff0c; 过往的经验究竟还能不能作用于这些前沿技术&#xff1f; 针对这一问题&#xff0c;本期《新程序员》采访了一 位拥有20年技术领导经验的技术预测者&#xff…

2011年01月25日 Go生态洞察:Go与JSON的高效结合

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

C#,数值计算——函数计算,切比雪夫近似算法(Chebyshev approximation)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Chebyshev approximation /// </summary> public class Chebyshev { private int n { get; set; } private int m { get; set; } privat…

2023年下半年架构案例真题及答案

案例的考点&#xff1a; 大数据架构 Lambda架构和Kappa架构 jwt特点 数据持久层&#xff0c;Redis数据丢失&#xff0c;数据库读写分离方案 Hibernat架构 SysML七个关系&#xff0c;填需求图 大数据的必选题&#xff1a; 某网作为某电视台在互联网上的大型门户入口&#…

第二证券:长期停牌一般是多久?

股票停牌不仅仅是个股的问题&#xff0c;它或许会影响到商场的整体运作和投资者的利益。那么&#xff0c;长期停牌一般是多久呢&#xff1f;从不同的视点分析&#xff0c;可以得到不同的答案。 1. 官方规则 首要&#xff0c;咱们需求查看相关规则。依据证监会规则&#xff0c…

Kafka入门

kafka无疑是当今互联网公司使用最广泛的分布式实时消息流系统&#xff0c;它的高吞吐量&#xff0c;高可靠等特点为并发下的大批量实时请求处理提供了可靠保障。很多同学在项目中都用到过kafka&#xff0c;但是对kafka的设计原理以及处理机制并不是十分清楚。为了知其然知其所以…

通达OA V12版,引入thinkphp5.1框架,及获取session

通达OA V12版&#xff0c;引入thinkphp5.1框架 如下过程引入如下问题&#xff0c;按上述问题解决htmlentities(): charset cp936 not supported, assuming utf-8 内容绝对原创&#xff0c;希望对您有帮助。您的打赏&#xff0c;是让我持续更新的牛奶和面包 如下过程引入 在D:/…

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面&#xff0c;让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…

uniapp u-tabs表单如何默认选中

首先先了解该组件&#xff1b;该组件&#xff0c;是一个tabs标签组件&#xff0c;在标签多的时候&#xff0c;可以配置为左右滑动&#xff0c;标签少的时候&#xff0c;可以禁止滑动。 该组件的一个特点是配置为滚动模式时&#xff0c;激活的tab会自动移动到组件的中间位置。 …

asp.net core mvc之路由

一、默认路由 &#xff08;Startup.cs文件&#xff09; routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…

生产过程建模在MES管理系统中的重要性

在现代制造业中&#xff0c;为了提升生产效能和满足市场需求&#xff0c;企业纷纷引入MES管理系统解决方案。然而&#xff0c;要成功实施MES管理系统&#xff0c;首要任务是深入理解和有效管理生产过程。为此&#xff0c;建立一个准确且可靠的生产过程模型变得至关重要。 生产…

Web服务器实战

网站需求 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于www.openlab.com/student 网站访问学生信息&#xff0c;www.openlab.com/data网站访问教学资料 www…

【2021研电赛】基于深度学习的蛋白质与化合物结合性质预测

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力&#xff0c;更有重磅电子产品免费领取! 获奖情况&#xff1a;三等奖 1.作品简介 针对药物发现过程中的药物筛选问题&#xff0c;本设计基于深度学习提出新的神经网络结构和数据处理方式用于预测蛋白质与化合物之…

更改 npm的默认缓存地址

npm的默认缓存一般在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache&#xff0c;而c盘往往空间不大。 1、在其他盘新建两个文件夹&#xff0c;如D盘&#xff0c;node_cache和node_global。如下图所示。 2、在cmd中执行npm config set prefix “node_cache的路径”&a…

关于AM5-DB低压备自投装置如何应用在某变电站项目的-安科瑞 蒋静

摘 要&#xff1a;随着电力需求的不断增加&#xff0c;电力系统供电可靠性要求越来越高&#xff0c;许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性&#xff0c;该类装置能够在工作电源因故障断开后&#xff0c;自动且迅速地将备用电源投…

什么是进销存系统?有哪些流程?

这篇给大家详细介绍一下&#xff0c;到底什么是进销存系统&#xff0c;它的发展历程如何&#xff1f;企业该如何利用进销存系统获得竞争优势&#xff1f; 至于为什么越来越多的企业都选择进销存系统&#xff0c;让我们先来看一下这个实例。 假设有一家零售超市&#xff0c;他…