剑指offer——第一章(C++实现)
写在前面的话
面试官会关注边界条件、特殊输入(如nullptr指针、空字符串等)以及错误处理。
题目1:把一个字符串转换成整数
边界条件:
1)考虑到输入的字符串中有非数字字符和正负号
2)要考虑到最大的正整数和最小的负整数以及溢出
3)考虑到当输入的字符串不能转换成整数时,应该如何做错误处理。
实现代码:
#include <iostream>
#include<string>
int StrToInt(std::string input) {
int len = input.length(), str_index=0;
int positive_num = 0, negative_num = 0;
if (len == 0) return 0;
long long answer = 0;
//去除字符串前置空格
while (input[str_index] == ' ') str_index++;
//正负号判断
if (input[str_index] == '+') {
positive_num++;
str_index++;
}
else if (input[str_index] == '-') {
negative_num++;
str_index++;
}
for (; str_index < len; str_index++) {
if (input[str_index] >= '0' && input[str_index] <= '9') {
answer = answer * 10 + input[str_index] - '0';
//溢出判断
if (positive_num && (answer>= 2147483647)) {
return 2147483647;
}
if (negative_num && (answer >= 2147483648)) {
return -2147483648;
}
}
else{
return 0;
}
}
return negative_num ? -answer: answer;
}
int main()
{
printf("请输入字符串:\n");
std::string input;
//读取一行字符串
getline(std::cin, input);
int answer = StrToInt(input);
printf("%d\n", answer);
system("pause");
return 0;
}
小技巧:
c++语言,cin和cout的比scanf和printf更耗时。所以,在线笔试的时候,多用后者。或者添加下图中的函数
题目2:求链表中的导数第k个节点
边界条件:
1、判断输入的指针是否为空
2、链表节点数是否小于k
3、k的值是否为0
实现代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
if ((pListHead == nullptr) || (k == 0)) return nullptr;
ListNode *fast = pListHead, *slow = pListHead;
//快指针移动k-1步,使其移动到链表第k个节点的位置
while ((fast->next != nullptr) && (k-1 > 0)) {
fast = fast->next;
k--;
}
//此时快指针移动到了链表第k个节点的位置
if ((k == 1) && (fast->next != nullptr)) {
while (fast->next != nullptr) {
fast = fast->next;
slow = slow->next;
}
return slow;
}
//此时快指针没有移动到链表第k个节点的位置(链表长度小于k)
else if ((fast->next == nullptr) && (k > 1)){
return nullptr;
}
//k节点为链表头节点
else{
return pListHead;
}
}
};
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
Go slice实现原理剖析
1. 前言 Slice又称动态数组,依托数组实现,可以方便的进行扩容、传递等,实际使用中比数组更灵活。 正因为灵活,如果不了解其内部实现机制,有可能遭遇莫名的异常现象。Slice的实现原理很简单,本节试图根据真实的使用场景,在源码中总结实现原理。 2. 热身环节 按照惯例,我们开始前先看几段代码用于检测对Slice的理解程度。 2.1 题目一 下面程序输出什么? package main import ( "fmt" ) func main() { var array [10]int var slice = array[5:6] fmt.Println("lenth of slice: ", len(slice)) fmt.Println("capacity of slice: ", cap(slice)) fmt.Println(&slice[0] == &array[5]) } 程序解释: main函数中定义了一个10个长度的整型数组array,然后定义了一个切片slice,切取数组的第6个元素,最后打印slice的长度和容量,判断切片的第一个元素和数组的第6个元素...
-
下一篇
[雪峰磁针石博客]python应用性能监控工具简介
监控简介 监视工具捕获,分析和显示Web应用程序执行信息。每个应用程序在Web堆栈的所有层都可能出现问题。监控工具通过展示帮助开发人员和运营团队响应并修复问题。 捕获和分析有关生产环境的数据对于主动处理Web应用程序的稳定性,性能和错误至关重要。 监视和日志记录的目的非常相似,它们有助于诊断应用程序的问题并帮助调试。主要差异为日志基于事件触发,而监视是被动的背景数据集合。 例如发生错误时,通过异常处理程序中的代码显式记录该事件。同时,监视代理程序对代码进行检测,并且不仅收集有关已记录异常的数据,还收集有关函数和方法性能的数据。 操作系统和网络的监控关注: CPU、内存和磁盘利用率,网络带宽和延迟 应用程序级别监视包含几个方面。 基于应用程序是重读,重写还是受到快速波动的影响而有所不同。涉及应用程序警告和错误(500级HTTP错误)、应用代码性能、模板渲染时间、浏览器渲染应用程序的时间、数据库查询性能等。 开源监控项目 错误跟踪 Sentry 最初只是一个Python监控项目,但现在可以用于任何编程语言。 图片.png 度量 statsd 是一个node.js网络守护程序,它监听指标并聚...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL数据库在高并发下的优化方案
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7,8上快速安装Gitea,搭建Git服务器


微信收款码
支付宝收款码