【C++】速通涉及 “vector” 的经典OJ编程题

【C++】速通涉及 “vector” 的经典OJ编程题

【C++】速通涉及 “vector” 的经典OJ编程题

一. 杨辉三角

本题LeetCode链接:

在这里插入图片描述

解题思路:

利用vector的特性创建一个二维数组,通过观察得知杨辉三角的0行0列全为1,其他位置元素的值都等于其上一行同列元素与上一行前一列元素的和。

代码实现:

classSolution{public: vector<vector<int>>generate(int numRows){ vector<vector<int>>arr(numRows);for(int i =0; i < numRows; i++){//arr[i].resize(i + 1, 1);//将开辟的空间全初始化为1 arr[i].resize(i +1); arr[i][0]= arr[i][i]=1;}//第一、二行的元素都是1,从第3行,第2列开始循环for(int i =2; i < numRows; i++){for(int j =1; j < i; j++){ arr[i][j]= arr[i -1][j]+ arr[i -1][j -1];}}return arr;}};

二. 删除有序数组中的重复项

本题LeetCode链接:

在这里插入图片描述

解题思路:

比较相邻的两个元素是否相等,若不相等则依次从原数组第二个位置(即变量index,下标为1)插入到原数组中

代码实现:

classSolution{public:intremoveDuplicates(vector<int>& nums){int index =1;for(int i =0; i < nums.size()-1; i++)//注意下面的i + 1越界情况{if(nums[i]!= nums[i +1]){ nums[index]= nums[i +1]; index++;}}//由于一旦发生交换后index就会++;所以此时index的大小就为最终长度return index;}};

【C/C++】按位运算符使用规制

1. 按位与(&):两个相应的二进制位都为1时,结果为1,否则为0。
2. 按位或(|):两个相应的二进制位只要有一个为1,结果为1。
3. 按位异或(^):两个相应的二进制位相异时,结果为1,相同时,结果为0。
4. 按位取反(~):对一个二进制数按位取反,即0变为1,1变为0。
5. 左移(<<):将一个二进制数的各位全部左移若干位,高位丢弃,低位补0。
6. 右移(>>):将一个二进制数的各位全部右移若干位,低位丢弃,高位补符号位

三. 只出现一次的数字

本题LeetCode链接:

在这里插入图片描述

解题思路:

0异或任何一个数的结果为该数本身,两个相同的整数异或结果为0;

代码实现:

classSolution{public:intsingleNumber(vector<int>& nums){int num =0;for(auto ch : nums){ num ^= ch;}return num;}};

四. 只出现一次的数字 III

本题LeetCode链接:

在这里插入图片描述

解题思路:

由于给定的整数序列中恰好有两个元素只出现一次,其余所有元素均出现两次;
将全部元素异或到sum(值为0)中就是这两个元素的异或结果(1.两个相等的元素异或结果为0;2.任何一整数异或0的结果为它本身);由于这两个数不相等,那么异或的结果sum中至少有一个二进制比特位的值为1,我们这里就找到结果sum中的最低的且值为1的比特位,并且把sum中的其他比特位都改变为0得到 lowbit(通过sum ^ -sum得到lowbit,lowbit其他比特位数值均为0);这就是这两个不同的元素的区别,再利用按位与(&)的特征来找到这两个不同的元素;此时用lowbit的唯一的数值为1的比特位来作为判断条件,分别用两个0异或原数组中的所以元素,由于其他元素均出现且只出现了两次,不管异或到哪个0这两个相同整数异或结果都是0,不会影响到最终要找的这两个不同元素。

关键声明:

 s =101100~s =010011(~s)+1=010100// 根据补码的定义,这就是 -s 效果:s 的最低 1 左侧取反,右侧不变 s &-s =000100// lowbit 作者:灵茶山艾府 链接:https://leetcode.cn/problems/single-number-iii/solutions/2484352/tu-jie-yi-zhang-tu-miao-dong-zhuan-huan-np9d2/ 来源:力扣(LeetCode) 

代码实现:

classSolution{public: vector<int>singleNumber(vector<int>& nums){ size_t sum =0;for(auto ch : nums){ sum ^= ch;}//只保留一个二进制数最低位的1,其他位均为0; size_t lowbit = sum &-sum;//此处要用size_t,解决溢出情况int type1 =0,type2 =0;//此处不可以用size_t,与vector<int>不匹配for(auto ch : nums){if(lowbit & ch){ type1 ^= ch;}else{ type2 ^= ch;}}return{type1, type2};//vector<int> ans(2,0);//for(auto ch : nums)//{//ans[(ch & lowbit) == 0] ^= ch; //}//return ans;}};

Read more

Qt步进电机上位机控制程序源代码:跨平台C/C++编写,支持多种端口类型与详细注释

Qt步进电机上位机控制程序源代码:跨平台C/C++编写,支持多种端口类型与详细注释

Qt步进电机上位机控制程序源代码Qt跨平台C/C++语言编写 支持串口Tcp网口Udp网络三种端口类型 提供,提供详细注释和人工讲解 1.功能介绍: 可控制步进电机的上位机程序源代码,基于Qt库,采用C/C++语言编写。 支持串口、Tcp网口、Udp网络三种端口类型,带有调试显示窗口,接收数据可实时显示。 带有配置自动保存功能,用户的配置数据会自动存储,带有超时提醒功能,如果不回复则弹框提示。 其中三个端口,采用了类的继承与派生方式编写,对外统一接口,实现多态功能,具备较强的移植性。 2.环境说明: 开发环境是Qt5.10.1,使用Qt自带的QSerialPort,使用网络的Socket编程。 源代码中包含详细注释,使用说明,设计文档等。 请将源码放到纯英文路径下再编译。 3.使用介绍: 可直接运行在可执行程序里的exe文件,操作并了解软件运行流程。 本代码产品特点: 1、尽量贴合实际应用,细节考虑周到。 2、注释完善,讲解详细,还有相关扩展知识点介绍。

By Ne0inhk
【c++中间件】cpp-httplib 介绍 && 使用

【c++中间件】cpp-httplib 介绍 && 使用

文章目录 * Ⅰ. cpp-httplib 介绍与安装 * Ⅱ. cpp-httplib 使用 * 测试样例 Ⅰ. cpp-httplib 介绍与安装 C++ HTTP 库(cpp-httplib)是一个轻量级的 C++ HTTP 客户端/服务器库,它提供了简单的 API 来创建 HTTP 服务器和客户端,支持同步和异步操作。 以下是一些关于 cpp-httplib 的主要特点: 1. 轻量级:cpp-httplib 的设计目标是简单和轻量,只需要一个头文件包含即可,不依赖于任何外部库。 2. 跨平台:它支持多种操作系统,包括 Windows、Linux 和 macOS。 3. 同步和异步操作:库提供了同步和异步两种操作方式,允许开发者根据需要选择。 4. 支持 HTTP/1.1:它实现了

By Ne0inhk
C++的核心--继承

C++的核心--继承

目录 前言 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 (一)单继承与多继承 (二)菱形继承 (三)菱形虚拟继承 八、继承的总结和反思 结语 前言 在C++ 编程世界里,继承是一项极为关键的特性,它为代码的复用和层次化设计提供了强大支持。掌握继承机制,对于编写高效、可维护的C++ 代码至关重要。今天,就让我们一起深入探究C++ 中的继承。 一、继承的概念及定义 继承是面向对象程序设计实现代码复用的重要手段。它允许我们在保持原有类特性的基础上进行扩展,产生新的类,即派生类。这体现了面向对象程序设计的层次结构,从简单到复杂逐步构建。 定义格式上,以 class Student : public

By Ne0inhk
C++——第一篇 基础语法

C++——第一篇 基础语法

——从C语言到现代C++的进化之路 你好,欢迎来到C++的世界。在正式开始之前,我想和你聊聊:为什么我们要花时间学习C++? 你可能会在很多地方看到"C++很难"的说法。确实,C++是一门"重型"语言,它不像Python那样"随写随用",也不像JavaScript那样与浏览器天然结合。但正是这种"重",让它成为了软件工业的基石——操作系统、数据库、游戏引擎、高性能服务器,背后都有C++的身影。 学习C++,本质上是在学习计算机系统的工作原理。它不会替你包办太多事情,但正因如此,它给了你最大的控制权。这种控制权,是成为一名真正的"工程师"而非仅仅是"码农&

By Ne0inhk