- 博客(98)
- 收藏
- 关注
原创 数据结构:插入排序详解
目录插入排序直接插入排序希尔排序插入排序基本思想:直接插入排序是一种简单的插入排序法,其基本的思想是:把待排序的记录按其关键码值得大小逐个插入到一个已经排好序得有序序列中,知道所有的记录插入完为止,得到一个新的有序序列。插入排序的思想类似于我们玩扑克牌时洗牌时的场景。直接插入排序描述如下:1.从第一个元素开始,该元素可以认为已经被排序2.取出下一个元素,在已经排序的元素序列中从后向前扫描3.如果该元素(已排序)大于新元素,将该元素移到下一位置4.重复步骤 3,直到找到已排序的元素小于或者等于
2021-03-10 17:58:05
889
2
原创 C/C++:让我康康谁还混淆面向对象和面向过程
作为一名计算机学生,入门时学习了C语言后,对于面向过程有了初步的认识,在之后更加深入的学习后,对于面向对象和面向过程有了一定的理解,那么这篇博客就一起研读一下两者的区别与联系~概念面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步地实现,然后在使用的时候一一调用即可。面向过程的性能较高。面向对象是把构成问题的事务分解成各个对象,而建立对象的目的也不是为了完成一个个步骤,而是为了描述某个事物在解决整个问题的过程中所发生的行为。性能上要比面向过程要低总而言之,面向过程是以过程为核
2021-03-03 20:04:17
127
1
原创 C++:两种避免头文件重复编译使用的方法
在C/C++语言中,变量、函数、结构体的定义和声明这些过程是分离的。声明通常放在头文件中,为了防止重复声明,就需要保证头文件的内容只被包含一次。。#ifndef宏定义和#pragma once功能为了避免同一个头文件被包含(include)多次1.#ifndef宏定义#ifndef,#endif是C/C++语言中的宏定义,通过宏定义避免文件多次编译。所以在所有支持C++语言的编译器上都是有效的,如果写的程序要跨平台,最好使用这种方式。使用语法#ifndef _FILE_H_#defi
2020-12-05 21:35:41
2973
原创 字符串最后一个单词的长度
题目描述计算字符串最后一个单词的长度,单词以空格隔开输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。示例输入hello nowcoder输出8牛客网题目链接在这里方法一:这个题目是要求我们计算字符串中最后一个单词的长度,拿到题目后,首先想到的是从后向进行遍历,使用count进行计数,遇到第一个(最后一个单词)空格进行停止,那么count种保存的数字就是最后一个单词的长度。其实现代码如下:#
2020-12-05 19:55:44
1777
原创 位运算的应用:强大的令人可怕
众所周知,我们学计算机的基础就是二进制和位操作,而位操作的应用又及其的灵活与广泛,又为我们的算法提供了新颖独特的思路。位运算基础位运算符描述运算规则<<左移二进位向左移若干位,高位丢弃,低位补0>>右移二进位向右移若干位,正数高位补0,负数高位补1&位与两个位都为1时才为1l位或两个位都为0时才为0~取反0变1,1变0^异或两个位相同时为0,相异为1位运算符介绍1、<< 左
2020-12-03 00:33:47
833
原创 力扣260: 只出现一次的数字iii
题目描述:给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 :输入: [1,2,1,3,2,5]输出: [3,5]注意:结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?力扣题目链接题目分析通过遍历一次的异或运算,所保留得到就是仅出现一次的两个数的异或结果,我们将其标记为bit_mask;(我们这里得到的是异或的结果,不能
2020-12-02 20:23:32
124
原创 力扣137:只出现一次的数字ii
题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 :输入: [2,2,3,2]输出: 3输入: [0,1,0,1,0,1,99]输出: 99题目思路:我们依然采用位运算,利用异或运算的特殊性质进行求解,这次不同的是其他的数字都出现了三次,我们可以和与运算一起搭配使用进行判断。异或运算:x ^ 0 = xx ^ x = 0与运算:
2020-12-02 14:42:13
177
原创 力扣136:只出现一次的数字
题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 :输入: [2,2,1]输出: 1输入: [4,1,2,1,2]输出: 4力扣题目链接题目思路:不使用额外的空间进行统计次数,我们采用位运算进行解决:异或运算有以下三个性质:任何数和0做异或运算结果仍然是原来的数;即:a ^ 0 = a;任何数和自身做异或运算,结果仍然是原来的数,即:a
2020-12-02 14:19:05
174
原创 C++:另类加法
class UnusualAdd {public: int addAB(int A, int B) { while(B != 0) { int ret = A ^ B;//对应位的和 B = (A & B) << 1;//对应和的进位 A = ret; } return A; }};
2020-12-02 13:50:51
293
原创 求最小公倍数
题目描述正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。输入描述:输入两个正整数A和B。输出描述:输出A和B的最小公倍数。示例1输入5 7输出35题目链接求最小公倍数有多种思路解法:穷举法、辗转相除法等但效率更高更简便的一种求解思路是利用公式:最小公倍数=两数之积/最大公约数#include <iostream>using namespace std;int main(){
2020-12-01 11:31:45
487
原创 最大公约数
利用辗转相除法求两个数的最大公约数,其思路如下:求num1/num2的余数令temp= num1%num2之后将num2的值赋给num1再将num1的值赋给temp终止条件是num2不为0#include <iostream>using namespace std;int main(){ int num1, num2; cin >> num1 >> num2; while(num2) { int te
2020-12-01 11:31:25
127
原创 C/C++:看完这篇,| 和 ||,& 和 && 的区别就搞定
不知道大家是否可以很清楚的将这几个运算符进行很好的区分,我在学习C/C++过程中,总是会将几个的用法混淆,但困难总是要克服的,那么今天就一起攻克这个难题,将它双双拿下!我们将 || 和 && 定义为逻辑运算符,而 | 和 & 定义为位运算符。&& 如果两个操作数都是非0,则条件为真;||如果两个操作数中有一个任意一个非0,则条件为真;& 按位与操作,按二进制位进行"与"运算,运算规则:(有 0 则为 0)0&0=0;
2020-11-23 23:27:42
1813
原创 C++:友元函数,有这一篇就够了
在学习C++时,关于友元类和友元函数这一小节,感觉比较难理解,这篇就来一起研究关于友元的相关知识吧~我们将从以下几点深入剖析友元函数:为什么要引入友元函数?什么时候使用友元函数?怎样使用友元函数?友元函数的优缺点有哪些?友元函数1.引入友元函数的原因...
2020-11-23 22:28:42
509
原创 C++:String类相关接口介绍
在C语言中我们常使用char*字符串进行相关的操作,在使用字符串时,在学习C++时,标准库为我们提供了专门的string类的相关接口。抛弃了char*字符串的相关用法,是因为和标准库相较,我们在使用时不必考虑内存是否足够、字符串长度等等,并且作为了一个类出现,它所提供的相关函数的操作满足了我们大多数情况下的需求,我们可以简单的理解为string类是一种C++的基本数据类型。标准库的String类使用时包含在头文件<string>中;string是表示字符串的字符串类;标准的字符串类
2020-11-21 11:30:53
177
原创 反转字符串 II:区间部分翻转
题目要求:给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。·如果剩余字符少于 k 个,则将剩余字符全部反转。·如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。(1.该字符串只包含小写英文字母。2.给定字符串的长度和 k 在 [1, 10000] 范围内。)示例:输入: s = “abcdefg”, k = 2输出: “bacdfeg”在解这道题的过程中,一开始读题目时,便觉得题目有些复杂
2020-11-17 09:37:55
697
原创 翻转字符串中的单词
题目要求:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。示例:输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”在做这个题目时,脑海中的第一反应就是采用双指针进行翻转,这样比较快捷方法一:class Solution {public: string reverseWords(string
2020-11-17 09:37:39
193
原创 C++:函数重载的详解看这里
缺省参数概念缺省参数是声明或定义函数时为函数的参数指定一个默认值,在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参。我们在学习C语言时,C语言编译器对函数原型的检测要求不严格,它不支持缺省参数。缺省参数分类:缺省参数有两种形式,它分为全缺省参数和半缺省参数。//全缺省参数void Test1(int a = 6, int b = 10, int c = 8){...
2020-11-16 20:45:08
719
原创 C++:缺省参数是怎样设置的?
缺省参数 我们在学习C语言时,C语言编译器对函数原型的检测要求不严格,因为它不支持缺省参数;在C++中,没有参数列表的函数,默认为void,不接受任何参数。void test(){ }int main(){ test(9); test(9, "No pains,no gains.\n"); return 0;}在C语言中代码可以编译通过;而在C++中由于参数类型的检测,编译无法通过;在C++对于函数参数检测更加严格,所以如果函数没有参数则不能接受任何参数。概念缺省参数
2020-11-12 23:15:14
2306
原创 Linux:快来深入学习了解进程基本概念啦
进程管理是操作系统重点、难点问题,也是贯穿Linux学习的知识点。那么什么是进程呢?1.为什么引入进程的概念?从理论角度看,是对正在运行的程序过程的抽象;从实际角度看,是一种数据结构,旨在清晰的刻画动态系统的内在规律,可以有效管理和调度进入计算机系统主存储器运行的程序。2.进程的基本概念用户角度:进程就是一段程序的执行过程进程实际上就是一个程序的运行中的描述,这个描述称为PCB(进程控制块),Linux下PCB就是一个task_struct结构体task_struct结构体task_
2020-11-02 23:44:08
252
原创 C++:函数模板的初识
模板大致可以分为函数模板和类模板两种类型,函数模板是算法库的基础,类模板是建立标准库容器和迭代器的基础。这一小节跟随小编来一起深入的了解函数模板的相关知识。问题引入在进行编程时,我们该如何编写一个通用的加法函数,交换函数…这些呢?我们可以使用重载函数的方式进行实现,但重载函数只是类型不同,代码的复用率和可维护性都很低。int Add(int left, int right){ return left + right;}int Add(double left, double right){
2020-11-02 17:18:52
93
原创 C++:宏函数和内联函数(一看就明了)
宏函数宏函数的优缺点优点:增强代码的复用性。在预处理的阶段会将使用宏函数的位置用宏展开,少了函数压栈等开销,因此可以提高程序运行的效率。提高性能。缺点:不方便调试宏。(因为预编译阶段进行了替换)导致代码可读性差,可维护性差,容易使用错误。没有安全类的检查内联函数...
2020-10-29 11:29:53
1444
原创 C++:浅析this指针你确定不来看看吗?
this指针的原理是一个很复杂的问题,本篇就一起深入探讨this指针。this指针的引入首先我们来看一个简单的日期类:#include <iostream>using namespace std;class Date{public: void Display() { cout << _year << "-" << _month << "-" << _day << endl; } void Set
2020-10-22 17:27:17
136
原创 C++:1+2+3+...+n求和
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题目思路分析思路一:(直接进行求解)这是一个求和题目,看到这个题后,不假思索的直接使用一个for循环即可求和得出答案,但违背了题目中使用循环语句的条件;class Solution {public: int Sum_Solution(int n) { int sum=n; for(int i=1;i<n;+
2020-10-19 21:00:07
11927
原创 Linux:gcc/g++编译器的使用
编译器编译过程要经历四个阶段:1.预处理(进行宏替换)2.编译(生成汇编)3.汇编(生成机器可识别代码)4.连接(生成可执行文件或库文件)gcc完成过程
2020-09-17 19:51:54
481
原创 Linux:使用sudo时user is not in sudoers file的解决
在使用yum命令安装包时出现了not in sudoers file这样的提醒xx是你当前的用户名,其实就是因为这个用户没有加入到sudo的配置文件当中,解决的办法就是到开配置文件加入到用户权限当中解决方法step 1:使用su root 切换成root 用户,并输入以下命令进入sudo配置文件step 2:在配置文件里找到下面 root ALL=(ALL) ALL在它下面的一行加入自己的用户权限,保存并退出(注意:这里的文件是可读的状态,在进行写入时,输入a进入插入模式
2020-09-17 10:54:38
1017
原创 Linux:如何安装CentOS7及虚拟机常见问题解决办法
虚拟机的关机方法:虚拟机在不使用的时候挂起就可以了,不要粗暴的去尝试用它的关闭按钮,亲身经历的惨痛教训,粗暴关闭后解决的最有效的方式就是重新安装了也可以使用命令进行关闭shutdown -h now笔者在使用VM虚拟机时曾经遇到过以下些问题,这里附上一些解决办法的链接,供大家参考,希望能为大家带来一些帮助。1.CentOS安装配置无脑式安装配置过程2.VM ware无法关机 虚拟机繁忙解决方法3.VMware虚拟机不能联网解决方法4.VMware虚拟机被占用解决方法5.未能将管道连
2020-09-16 21:56:45
254
原创 数据结构:二叉树的相关概念和结构
在我们学习二叉树之前,先来了解一下树以及节点方面的概念和定义,这样更有助于我们学习二叉树的性质根结点:没有父结点叶结点:没有子结点节点的度:一个节点含有的子树的个数称为该节点的度;(如A节点的度为6)叶结点或终端结点:度为0的节点(如:B、C等)非终端节点或分支节点:度不为0的节点(如:D、E等)双亲节点或子节点:若一个节点含有子节点,则这个节点称为其子节点的父节点(如:A是B的父结点)孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点(如:B是A的孩子节点)兄弟节点:具有相
2020-09-07 22:55:15
313
原创 Linux:vim编辑器的使用
vim编辑器vim——命令行下的文本编辑工具文本编辑:插入数据、复制、剪切、删除、保存、退出编辑默认不支持鼠标的操作,并且没有Windows下的快捷键的使用vim的使用vi/vim的区别在于,它们都是多模式编辑器,但vim是vi的升级版本,它不仅兼容vi的所有命令,而且还有自己的一些新特性。vim的基本概念...
2020-08-14 00:46:01
88
原创 Linux:怎样让Vim编辑器显示行数
我们习惯了在Windows系统下编写代码报错精准到某一行,但当我们第一次使用vim编辑器写代码时,这个时候的环境是没有配置好的,这样改如何设置呢?下面我就教教无脑式的设置行号一、暂时性的设置行号如果只是临时性的显示vim中的行号,只需要按ESC键退出编辑内容的模式,回到普通模式下输入:set number按回车键就可以显示行号了,行号显示只是暂时的,退出后就不再显示行号了二、永久性的设置行号...
2020-08-13 22:29:22
29274
4
原创 Linux:权限管理详解,看了就会系列
Linux权限管理概念Linux下有两种用户:超级用户(root)和普通用户超级用户:可以在Linux系统下做任何操作,不受限制。普通用户:在Linux系统下做有限的操作。超级用户的命令提示符是“#”。普通用户的命令提示符是“$”。命令:su[用户名]功能:切换用户Linux权限管理...
2020-08-13 21:15:53
352
原创 数据结构:栈的实现
栈的结构和概念站是一种特殊的线性表,它只允许在固定的一端进行插入和删除元素的操作。进行数据插入和删除操作的一端成为栈顶,另一端称为栈底,栈中元素遵循先出后进的顺序压栈:出栈:栈的实现...
2020-07-25 19:51:26
197
原创 数据结构:单链表的实现(最强解释版)
链表的概念及其结构链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链表接次序实现的。链表不能将元素直接存储在不连续的内存空间,因为此结构中下一个元素未知,因此除了要存储元素的信息外,还必须要存储元素下一个节点的位置(地址)链表的结构链表可以分为下面三类。组合起来共有八种结构1.单向、双向2.带头节点、不带头3.循环、不循环...
2020-07-24 20:57:33
586
原创 数据结构:C语言实现顺序表(有详细解释哦)
线性表线性表时一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串线性表在逻辑上的存储是线性结构,但在物理结构上并不一定是连续的,它通常以数组和链式结构进行存储顺序表顺序表的底层结构就是一段连续的空间概念及其结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组进行存储,在数组上完成数据的增删改查功能顺序表分为:1.静态顺序表...
2020-07-22 00:55:23
708
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅