无重复字符的最长子串-算法题-C++实现-Leetcode
前言
近期准备把力扣leetcode算法题刷一遍,算是一个Flag吗?几千道题啊啊啊啊啊。。。。。。我是不是膨胀了?
把我的C++解决方案记录在这里,与大家分享。
题目描述
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
C++代码实现
class Solution {
public:
int lengthOfLongestSubstring(string s) {
...
整数转罗马数字-算法题-C++实现-Leetcode
前言
近期准备把力扣leetcode算法题刷一遍,算是一个Flag吗?几千道题啊啊啊啊啊。。。。。。我是不是膨胀了?
把我的C++解决方案记录在这里,与大家分享。
题目描述
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符
数值
I
1
V
5
X
10
L
50
C
100
D
500
M
1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (100 ...
罗马数字转整数-算法题-C++实现-Leetcode
前言
近期准备把力扣leetcode算法题刷一遍,算是一个Flag吗?几千道题啊啊啊啊啊。。。。。。我是不是膨胀了?
把我的C++解决方案记录在这里,与大家分享。
题目描述
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
字符
数值
I
1
V
5
X
10
L
50
C
100
D
500
M
1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (100 ...
CMakeLists.txt在add_definitions添加-lpthread,仍报错:对pthread_create未定义的引用
Bug描述
在ubuntu16.04下采用CMake编译c++代码,在CMakeLists.txt里的add_definitions()已添加-lpthread(即add_definitions("-g -std=c++11 -lpthread")),CMakeLists.txt文件内容如下:
cmake_minimum_required(VERSION 3.5)
project(xjc_cpp11)
set(CMAKE_CXX_STANDARD 14)
add_definitions("-g -std=c++11 -lpthread")
add_executable(xjc_cpp11
main.cpp
AlgorithmTwo.cpp
CrashIdentifier.cpp
Gps.cpp
Gsensor.cpp
Motion.cpp
Stay.cpp)
执行如下命令时仍然报错——
patten@patten-hp:~/workspace/xj_collide/xj_collide/OO_solution_cpp98/src$ ...
C++矩阵运算库Eigen3入门中文教程
前言
由于项目需要,需采用C实现数以百万量级的数据运算,原本已经采用C单文件实现了所有客户算法需求,但性能较低,在优化的过程中找到了该矩阵运算库Eigen3,手记一下。
本文档翻译整理自:《Overview》及《Getting started》
概览Overview
这是Eigen3的API文档。你可以下载它作为tgz档案离线阅读。
你已经是Eigen2用户了?这里有一个从Eigen2到Eigen3指南来帮助移植你的应用程序。
如果你是第一次接触Eigen,你最好先看一下入门页面的文档页Getting started(译者按:即本文的下一部分),它向您展示了如何使用Eigen编写和编译您的第一个程序。
然后,快速参考页面以一种非常简洁的格式为您提供了一个非常完整的API描述,这对于回忆特定功能的语法或快速查看API非常有用。它们目前包括以下两个功能集,将来还会有更多的功能集:
[快速索引]密集矩阵和数组操作(译者按:为避免翻译有误,附原文Dense matrix and array manipulations)
[快速索引]稀疏线性代数(译者按:为避免翻译有误,附原文Sparse ...
C++ 10位时间戳(精确到秒)与标准时间格式(%Y-%m-%d %H:%M:%S)
前言
10位时间戳:精确到秒
13位时间戳:精确到毫秒
项目需求,翻译python实现的文件,需要将datetime.fromtimestamp以C++方式实现类似功能,即将13位时间戳timestamp(精确到毫秒)转换为标准时间格式(YY-MM-DD hh:mm:ss),后面发现只需要10位时间戳(精确到秒)即可满足需求,故实现如下函数示例:
编译环境
系统环境:
patten@patten-hp:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
patten@patten-hp:~$
IDE环境:Visual Studio Code,Version: 1.38.1
时间戳转标准时间
代码实现:
如下:
// timestamp.cpp
#include <stdio.h>
#include <time.h>
#in ...
Linux下C++查找指定文件夹路径下文件名含有指定字符串的文件(以前缀/后缀为例)
前言
项目需求中需要处理百万级别的数据,第一步便是读取指定路径下的所有.csv文件,于是有了该博文。其中会用到C++11的新特性std::regex (点击这里去了解)及其相关的正则表达式。
编译环境
系统环境:
patten@patten-hp:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
patten@patten-hp:~$
IDE环境:Visual Studio Code,Version: 1.38.1
目标路径下的文件列表:
patten@patten-hp:~/文档/collide/222222$ ls
drive-data_collision-gps_0.csv drive-data_collision-sensor-stay_0.csv
drive-data_collision-gps_1.csv drive-data ...
C/C++读写csv文件
csv文件其实就是文本文件,每行字段用逗号分隔。项目需要对csv文件进行数据操作,故搜到了一个比较好用的方案,并做了一定程度的修改,代码如下:
编译环境
系统环境:
patten@patten-hp:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
patten@patten-hp:~$
IDE环境:Visual Studio Code,Version: 1.38.1
代码示例
//collide.cpp
#include <fstream> //定义读写已命名文件的类型
#include <iostream>
#include <sstream> //多定义的类型则用于读写存储在内存中的string对象
#include <vector>
using namespace std;
int mai ...
Linux下C++获取当前时间(日期)YY-MM-DD hh:mm:ss
在C++实际项目中,有时候需要当前时间和过去时间做对比,因此找到了一种方法,经检测可用。
话不多说,直接上代码——
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374//getLocalTime.cpp#include <stdio.h>#include <sys/time.h>#include <time.h>#include <unistd.h>#include <iostream>#include <sstream>#include <string>using namespace std;std::string FaGetSysTime() { struct timeval tv; gettimeofday(&tv, NU ...
C++ 中实现类似split()的字符串分割函数
前言
C++ 至今为止(2019/09/05)没有官方实现的字符串分割函数。相比 Python、Java 等语言,多少是有些不便的。
参考资料:
1、《C++ 的 string 为什么不提供 split 函数?》
2、《Why doesn’t std::string have a split function》
这里我们来在 C++ 中实现字符串分割函数。
编译环境
系统环境:
patten@patten-hp:~$ sudo lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.6 LTS
Release: 16.04
Codename: xenial
patten@patten-hp:~$
IDE环境:Visual Studio Code,Version: 1.36.1
利用来自 C 的 strtok 函数
C 语言的 string.h 中提供了名为 strtok 函数,用于对 C 风格的字符串进行分割。其函数签名为:
char* str ...