![](https://img-blog.csdnimg.cn/20190918140053667.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
文章平均质量分 51
C/C++
木可木可❀
一个努力的小小白~
展开
-
(C++) LeetCode 39:组合问题
LeetCode 39题原创 2022-09-18 10:39:19 · 552 阅读 · 2 评论 -
LeetCode 剑指 05 :替换空格
题目:思路:这个题我是直接另外用了一个字符串变量来存储,这样的话就另外需要O(n)的空间。也可以直接在同一个字符串s上进行操作,不过那样的话就需要先对字符串的长度进行扩充。扩充可以调用库函数 resize()实现。当利用 resize()扩容后就是给字符串进行替换操作了,这里很容易想到可以用双指针的方法,但是如果双指针我们是从前往后移动的话,那么每次需要替换空格的时候都要把后面的数据往后挪3位,如此一来时间复杂度相当于就是O(n^2)了,那还不如再创一个字符串呢。。。所以,这里的小技巧是双指原创 2022-05-10 19:52:43 · 143 阅读 · 0 评论 -
LeetCode 151:颠倒字符串中的单词
题目:思路:这道题实际上还是对字符串的翻转的操作,只不过限制又加多了一些,单词与单词之间有多余的空格,题目要求空格也要规整,这道题目我的思路是,先把单词里多余的空格删掉,那么这里就分为了三种情况,一种是在最前面有多余的空格,需要全部清除,第二种是单词与单词之间有多余的空格,只需要保留一个就可以,第三种就是最后面有多个空格,也全部删掉。关于去除多余的空格我的思路是利用了两个标记来进行判断,判断空格是否多余或者是合法,类似于移除元素那道题,利用双指针把字符串前移到正确的格式,然后start指针的原创 2022-05-10 14:05:39 · 217 阅读 · 1 评论 -
LeetCode 剑指 Offer 58 - II. 左旋转字符串
思路:这道题可以有两种方法,实际上就是字符串的翻转问题。这里我先对整体翻转,然后再对局部进行翻转,但是这里要注意,局部翻转的时候要注意字符的个数需要进行处理。class Solution {public: string reverseLeftWords(string s, int n) { reverse(s.begin(), s.end()); n = n % s.length(); reverse(s.begin(), s.begin() + (s.length() ..原创 2022-05-10 10:29:48 · 116 阅读 · 0 评论 -
翻转字符串
对于字符串的问题来说,翻转问题还是比较常见的,在LeetCode里也有这样的问题,需要倒序输出字符串的内容之类的,这种问题有多种解法,这里进行简单的总结。方法1:这种方法的原理思路是,直接创建一个新的字符串,倒序存储原本的字符串的内容,就可以实现字符串的翻转了void reverse1(string s) { string newstr; for (int i = s.size() - 1; i >= 0; i--) { newstr += s[i]; } cout <原创 2022-05-10 10:29:05 · 288 阅读 · 0 评论 -
LeetCode 189:轮转数组
题目:思路:最简单的方法应该是利用for多次将数组的内容一个一个的移动,但是这种方式需要多个双重for循环,比较耗时,所以这里想的方法是尽量在一个for循环中就结束操作,以下分为两种情况,一种是当我要循环的次数少一整个数组长度的一半的时候,还有是超过一半的时候,具体可以看代码,这里有一个要注意的点是,k的次数需要取模(如果是暴力法通过取模可以减少循环的次数),如果k没有取模那么可能就会有错误。代码:class Solution {public: void rotate(vec原创 2022-05-08 21:33:30 · 1087 阅读 · 0 评论 -
LeetCode 283:移动零
思路:暴力法多次移动肯定是不行的,会超时。提出新的方法,通过快慢指针来实现代码:class Solution {public: void moveZeroes(vector<int>& nums) { int fastIndex=0,slowIndex=0; bool flag=true; while(fastIndex<nums.size()){ if(flag==true){ ..原创 2022-05-08 21:28:19 · 513 阅读 · 0 评论 -
LeetCode:58. 最后一个单词的长度(C++)
题目:代码:class Solution {public: int stringLength(string str) { int length = 0; while (str[length] != '\0') { length += 1; } return length; } int lengthOfLastWord(string s) { int last原创 2022-04-27 10:53:36 · 1000 阅读 · 0 评论 -
深度优先搜索(DFS)
1.前言深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。你可以跳过第二节先看第三节,:)2.深度优先搜索VS广度优先搜索2.1演示深度优先搜索的过程还是引用上篇文章的样例图,起点仍然是V0,我们修改一下题目意思,只需要让你找出一条V0到V6的道路,而无需最短路。图2-1 寻找V0到V6转载 2021-12-04 10:19:12 · 11515 阅读 · 0 评论 -
sockaddr_in结构体的说明(成员:sin_family、sin_addr、sin_zero)
sockaddr_in是系统封装的一个结构体,具体包含了成员变量:sin_family、sin_addr、sin_zero这个结构体被封装在ws2def.h中,具体的代码如下:typedef struct sockaddr_in { #if(_WIN32_WINNT < 0x0600) short sin_family; #else //(_WIN32_WINNT < 0x0600) ADDRESS_FAMILY sin_fami...转载 2021-11-04 11:22:04 · 2159 阅读 · 0 评论 -
网络编程Socket之 bind 、listen 函数
bind摘要:在套接口中,一个套接字只是用户程序与内核交互信息的枢纽,它自身没有太多的信息,也没有网络协议地址和 端口号等信息,在进行网络通信的时候,必须把一个套接字与一个地址相关联,这个过程就是地址绑定的过程。许多时候内核会我们自动绑定一个地址,然而有时用 户可能需要自己来完成这个绑定的过程,以满足实际应用的需要,最典型的情况是一个服务器进程需要绑定一个众所周知的地址或端口以等待客户来连接。这个事由 bind的函数完成。从bind函数功能我们很容易推测出这个函数的需要的参数与相应的返回值,如果此.转载 2021-11-04 11:15:30 · 1285 阅读 · 0 评论 -
网络编程中的htons()、ntohl()、htonl()、ntohs()函数
在C/C++写网络程序的时候,往往会遇到字节的网络顺序和主机顺序的问题。这是就可能用到htons(), ntohl(), ntohs(),htons()这4个函数。网络字节顺序与本地字节顺序之间的转换函数: htonl()--"Host to Network Long" ntohl()--"Network to Host Long" htons()--"Host to Network Short" ntohs()--"Network to Host Short"转载 2021-11-04 10:54:37 · 648 阅读 · 0 评论 -
C 语言中 bzero()函数的使用
bzero() 能够将内存块(字符串)的前n个字节清零,在"string.h"头文件中,原型为: void bzero(void *s, int n);【参数】s为内存(字符串)指针,n 为需要清零的字节数。bzero()将参数s 所指的内存区域前n 个字节全部设为零。举个栗子:#include<string.h>int main(int argc,char** argv){ struct sockaddr_in serveraddr; bzero(&..原创 2021-11-04 10:25:26 · 36110 阅读 · 1 评论