题目链接:倒置字符串__牛客网 (nowcoder.com)
题目描述:
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I依次输出倒置之后的字符串,以空格分割
输入:
I like beijing.
输出:
beijing. like I
🔓解法一【下标访问】📖流程描述:
整体逆置
reverse(s.begin(), s.end());
部分逆置end遇到’ ‘时,逆置(s.begin()+begin,s.begin()+end)begin到end的下一位,++end继续遍历,直到s[end] 为0退出循环,完成逆置;注意:最后一个位置为’\0’时不会逆置,需要在出循环时对最后一个单词逆置
⌨️代码实现:
12345678910111213141516171819202122232425262728#include <iostream>#include <string>#include <algorithm>using namespace std;in ...
12var dd = “hello”;dnqoindq
题目链接:返回小于 N 的质数个数_牛客题霸_牛客网 (nowcoder.com)
题目描述:
返回小于 N 的质数个数
示例:输入:10输出:4说明:N=10,质数有 [2, 3, 5, 7]
💡📖流程描述:质数只能被1和自身整除的数
遍历判断是否为质数;
判断质数(优化:0、1和偶数不是质数)跳过偶数;
⌨️代码实现:
12345678910111213141516171819202122232425262728#include <iostream>using namespace std;// 2. 判断质数int is_prime(int x){ if (x == 0 || x == 1) return 0; //2.1 0和1不是质数 if (x == 2) return 1; //2.2 2是质数 if (x % 2 == 0) return 0; //2.3 除2外偶数不是质数 int i = 3; for (; i * i <= x; i += ...
cpp/stl/stack_queue
题目链接:栈的压入、弹出序列_牛客题霸_牛客网 (nowcoder.com)
题目描述:
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
0<=pushV.length == popV.length <=1000
-1000<=pushV[i]<=1000
pushV 的所有数字均不相同
示例1:输入:[1,2,3,4,5],[4,5,3,2,1]返回值:true说明:可以通过push(1)=>push(2)=>push(3)=>push(4)=>pop()=>push(5)=>pop()=>pop ...
@TOC
gdb代码调试
1. 软件发布形式一般的软件发布有两种:
debug:可以被调试,形成的可执行程序会添加调试信息—>用户不需要+体积大 release:形成的可执行程序会去掉调试信息(面向用户)调试时使用的是debug模式
gcc/g++编译时动态链接,默认release发布
gcc -o $@ $^ -g -g以debug方式发布可执行呈现的格式->ELF redelf
2. 安装gdbyum install -y gdb:安装gdb调试软件
3. 调试命令 l 行号/函数名/文件名 显示代码内容(记录最近一次操作,下方向键) r 重新运行 c (continual)运行到下一个断点b (Break point)打断点——进行范围定位排除b 行号/内容打断点b 文件名:行号info b用来查看断点d 断点编号删除断点disable 断点编号 禁用断点enable 断点编号 使能(禁用/开启)断点
n (next)逐过程s(step)逐语句
逐语句( ;为分隔符):进入一个函数(对应VS中的F11)逐过程:每一行看作一个整体 ...
本文使用到的工具有gcc vim make/makefile,边学习边实践,快速上手!
@TOC
【Linux】用C语言实现第一个小程序——“进度条”
首先我们补充两个小知识
1. 两个补充1.1).makefile文件编写先写通makefile,防止源文件被覆盖或删除
12345processbar:main.c gcc -o $@ $^ .PHONY:clean clean: rm -f processbar
![[Pasted image 20231107174117.png]]生成可执行文件,第一步makefile文件编写完成。
1.2). 介绍休眠函数sleep():
函数库文件<unistd.h>sleep(3) 程序休眠3秒后退出unistd.h是unix std的意思,包含了许多UNIX系统服务的函数原型。
现象1)加‘\n’后会再显示器显示,光标闪动3秒后停止:
2)不加’\n’ 系统会休眠3秒,之后再显示器显示:
以上现象体现了c语言提供的缓冲区,2)在休眠时候就已经结束了,c语言是顺序结构,从上往下按顺序执行 ...
@TOC
先单趟在再整体
插入排序直接插入排序(InsertSort)思想
举例——>摸牌
在有序的数组中摸一张牌插入到前面合适的位置中去插入排序的逻辑,摸到一张牌后和最后的比较大小,大则插入在后面,使得总体有序。
实现
单趟
先排单趟,比较到要插入数据与前一个数据(end)比较大小,比该数大则插入到该数后面,直到比较到第一个数据为止插入到首元素位置(循环条件为end>=0)。先将要插入元素保存到tmp中,该位置为end+1,等到合适位置后插入到end+1中去。为处理end比较完没找到的(tmp最小)的情况,当tmp>=end时,跳出while,在循环外交换。每次比较完后end--向前比较单趟如下![[Pasted image 20230925213125.png]]
总体
共有n个数据,至少比较n次,故在用for循环,由于end+1的存在,i<=n-2/i<n-1;拿到一个乱序数组,从第一个数据向后排序,故end=i,
代码123456789101112131415161718192021void InsertSort(int ...
今天给大家带来的是在Windows上安装Linux操作系统的详细步骤~
@TOC
总体来说,安装虚拟机需要下载两个软件
主流下载有:
vmwear player免费版centos7 / ubuntu镜像文件
1.下载 VMwear player目前VMware Workstation Player的官方下载渠道已经发生了变化,但仍有一些方法可以获取下载:
官方遗留链接:
https://softwareupdate.vmware.com/cds/vmw-desktop/player/17.5.2/23775571/链接: 官方遗留链接 这个链接可以直接下载VMware Workstation Player 17.5.2版本。
Broadcom官方下载:
访问 https://support.broadcom.com/注册并登录账号在”My Downloads”中搜索”VMware Workstation Player”,选择版本并下载
(由于Broadcom收购VMware后的政策变化,下载流程可能会有所不同。建议优先使用官方遗留链接或Broadcom官方渠 ...
@TOC
Linux基础指令
指令操作的理解
先有得指令,后有得图形化界面——指令操作和图形化界面操作是没有本质区别的,形式上的不同 > whoami——查看当前所在账户who——查看当前服务器下所有账户
clear 清屏
补充:文件=文件内容+文件属性如果在windows上新建一个空文件,这个文件要 占用磁盘/固态硬盘 的储存空间吗?占据磁盘空间.文件属性,属性数据也是数据全是二进制数据,都要被储存所有的文件操作本质要么对文件内容做操作,要么对文件属性做操作(框架)
学完上述几个简单指令后,我们开始基础指令的详细学习
指令详解
01.ls指令
功能:显示所有当前我所有文件名属性列表选项: ls ——列出当前文件 ls -l——列出当前文件详细属性信息>ls -a ——列出所有文件(包括隐藏文件)
隐藏文件:在Linux中隐藏文件通常以 . 开头ls -la 显示隐藏文件 .开头(-l -a)
注:ll等价于ls -l
02. pwd命令
process work direct——查看当前工作目录pwd——我当前 ...
@TOC
1. 二叉树销毁
利用分而治之的思想可转化为:
子问题:左右子树的销毁。
- 返回条件(最小规模子问题):左/右子树为空。先销毁根再销毁左右——后序查找
实现1234567891011void destory(BTNode* root){ if (root == NULL) { return 0; } destory(root->left); destory(root->right); free(root); //形参改变不会改变实参,故在函数外置空}
2. 二叉树查找值为x的值
子问题:左/右子树是否为x
返回条件:
找到x返回该地址;
左子树找不到去右子树找;
右子树找不到返回空;
注意:要返回地址,所以每次栈帧销毁都要接收返回值,直到回归第一层。
实现1234567891011121314151617181920BTNode* FreeFind(BTNode* root,BTDataType x){ //遍历->找到后即返回在函数中接收-&g ...
@TOC
前言
链式二叉树增删查改的价值
堆的意义:插入数据的意义—排序、topk
普通链式二叉树没有意义
我们学习当前链式二叉树有以下两目的
更复杂的二叉搜索树->AVL 红黑树(以后打基础)——高阶
排序二叉树
搜索二叉树——左边比根小,右边比根大
很多二叉树的题是在这一块(笔试面试O阶题)
所以二叉树这块的重点不是增删查改,而是学习二叉树的结构,为之后学习打基础。
定义结构—BinaryTreeNode
12345678typedef int BTDataType;typedef struct BinaryrTreeNode{ struct BinaryTreeNode* left; struct BinaryTreeNode* right; BTDataType val;}BTNode;
手动构建—BuyNode构建如下树:
123456789101112131415161718192021222324252627282930313233BTNode* BuyTreeNode(BTDataType x){ //malloc申 ...









