自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 资源 (1)
  • 收藏
  • 关注

原创 C++||排序

C++||排序1.插入排序1.1直接插入排序思路:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移.

2020-12-28 21:30:28 249

原创 二叉树的最近公共祖先

二叉树的最近公共祖先1.搜索二叉树解题思路:由于为搜索二叉树,所以判断所给节点的值与根节点值大小的比较,如果p大于根节点,q小于根节点,那么根节点必定为公共祖先.如果都小于则在root->left中继续遍历都大于在root->right中遍历。class Solution {public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(p == root

2020-12-21 21:32:37 127

原创 数据结构||二叉树的三种遍历方式(非递归)

二叉树的三种遍历方式(非递归)//都是leetcode上的二叉树练习题,利用栈先进后出的特性用来标记根节点,然后进行一系列出栈入栈操作最终得到结果.1.先序遍历class Solution {public: vector<int> preorderTraversal(TreeNode *root) { vector<int> res; TreeNode* cur = root; stack<TreeNode*&gt

2020-12-17 21:13:38 146

原创 Linux||select函数(高级IO)

select函数(高级IO)前期知识在开始接触select之前,你需要先对IO的同步,异步,阻塞,非阻塞有个基本的了解,知道什么是IO多路复用。下面这篇文章可以帮助你快速区分这几种模型:IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)要了解select,你必须得先接触过socket编程,了解什么是文件描述符(fd),文件描述符表,文件指针,可以参阅下面这三篇博文: Linux的SOCKET编程详解 Linux下 文件描述符(fd)与 文件指针(FILE*) file结构体详解select的使用场景

2020-12-17 19:59:15 1681

原创 剑指Offer||变态跳台阶

剑指Offer-09 变态跳台阶题目描述: 一个台阶总共有n级,如果一次可以跳1级,也可以跳2级……也可以跳n级。求总共有多少总跳法,并分析算法的时间复杂度。分析:用Fib(n)表示跳上n阶台阶的跳法数。如果按照定义,Fib(0)肯定需要为0,否则没有意义。但是我们设定Fib(0) = 1;n = 0是特殊情况,通过下面的分析就会知道,强制令Fib(0) = 1很有好处。ps. Fib(0)等于几都不影响我们解题,但是会影响我们下面的分析理解。当n = 1 时, 只有一种跳法,即1阶跳:Fib

2020-12-10 20:56:03 73

原创 剑指Offer|| 用两个栈实现队列

用栈实现队列用两个栈实现队列思路:创建两个栈s1 s2s2用来模拟入队。s1用来模拟出队后面设计思路就非常的简单class CQueue {public: stack<int> a;//入队 stack<int> b;//出队 CQueue() { } void appendTail(int value) { a.push(value); } int deleteHead() { if(b.

2020-12-08 19:54:14 77

原创 剑指Offer||合并两个排序的链表

剑指 Offer 25. 合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4//非递归方法class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new Li

2020-12-08 19:53:10 75

原创 剑指Offer|| 不用加减乘除计算加法

剑指Offer48-不用加减乘除计算加法题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。分析:注意测试用例里面可能有期中有个数为0的情况这样while循环会直接跳出去,所以先判断下。class Solution {public: int Add(int num1, int num2) { int sum,carry; if(num2 == 0) { num2 = num1;

2020-12-08 19:51:58 70

原创 剑指 Offer|| 跳台阶

剑指offer-8题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目分析:与斐波那契数列类似,当number为0,1,2时候返回本身,当number大于2时,返回该数的后两位数字相加.//非递归class Solution {public: int jumpFloor(int number) { vector<int> v(number+1); v[0]=

2020-12-08 19:51:20 77

原创 C++||多态

多态1. 概念对于不同的对象,去完成同一个行为的时候产生不同的状态(一个东西的不同状态)2. 定义和实现2.1 定义多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了Person。Person对象买票全价,Student对象买票半价在继承中要构成多态还有两个条件:调用函数的对象必须是指针或者引用(*p &p)被调用的函数必须是虚函数,且完成了虚函数的重写什么是虚函数?虚函数:就是在类的成员函数的前面加virtual关键字例:

2020-12-07 19:00:43 145

原创 牛客网||参数解析

**题目ID:****36898-**参数解析链接:https://www.nowcoder.com/practice/668603dc307e4ef4bb07bcd0615ea677?tpId=37&&tqId=21297&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking【题目解析】:本题考察string的运用【解题思路】:本题通过以空格和双引号为间隔,统计参数个数。对于双引号,通过添加flflag.

2020-12-07 15:48:26 174

原创 牛客网||求最大连续bit数

题目ID:36910求最大连续bit数链接:https://www.nowcoder.com/practice/4b1658fd8ffffb4217bc3b7e85a38cfaf2?tpId=37&&tqId=21309&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking【题目解析】:这道题考察位运算【解题思路】:根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) &amp.

2020-12-04 20:16:01 144

原创 牛客网||最近公共祖先

题目ID:最近公共祖先链接:https://www.nowcoder.com/practice/70e00e490b454006976c1fdf47f155d9?tpId=8&&tqId=11017&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking【题目解析】:最近公共祖先表示距离两个节点最近的公共父节点,这道题考察二叉树。【解题思路】:题目所描述的满二叉.

2020-12-04 20:14:48 144

原创 牛客网||井字棋

题目:井字棋题目解析:判断行,列,主副对角线之和是否等于行数。class Board {public: bool checkWon(vector<vector<int> > board) { //检查行和是否为row int row = board.size(); int i,j,sum; for(i=0;i<row;i++) { sum = 0; .

2020-12-03 15:11:36 213

原创 剑指Offer||合并两个排序的链表

剑指 Offer 25. 合并两个排序的链表输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4//非递归方法class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* head = new Li

2020-12-02 16:26:55 82

原创 牛客网||求路径总数

**题目ID:****36915-**求路径总数链接:https://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b?tpId=37&&tqId=21314&rp=1&ru=/activity/oj&qru=/ta/huawei/question-ranking解题思路| 1 | 2 | 3 |-------------| 4 | 5 | 6 |-------------| 7

2020-12-02 15:30:28 206

原创 牛客网||另类加法

**题目ID:****25083 --**另类加法链接:https://www.nowcoder.com/practice/e7e0d226f1e84ba7ab8b28efc6e1aebc?tpId=8&&tqId=11065&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking【题目解析】本题的意思是自己实现加法,不适用现成的运算符.【解题思路】:本题

2020-12-02 15:29:24 117

原创 C||const位置

const位置不同 所对应的指针含义不同一、常量const int a = 0;二、指针1、指针指向地址中存储的值不能改变int a = 0;const int b = 2;const int *q;q = &a; //非const赋值给const*q = 5; //报错,不能对指针指向地址存储的值进行修改p = &b; //非const指针地址赋值2、指针指向的地址不能改变,值可改变int a = 1;const int b = 0;int * const

2020-12-01 17:46:02 190

原创 牛客网||最小公倍数

题目:求最小公倍数【解题思路】:最小公倍数 = 两数之积除以最大公约数,这里使用碾转相除法进行最大公约数的求解:即a与b的最大公约数可以转化为a、b之间的余数为两者之间最小的数之间的公约数。所以对于输入的两个数进行连续求余,直到余数为0,求余的分母即为结果。(辗转相除法求最大公约数)#include <iostream>using namespace std;int gcd(int a,int b){ int tmp = 0; while(a%b!=0) {

2020-12-01 17:39:40 115

原创 牛客网||两种排序方法

题目:两种排序方法【解题思路】:思路很简单,将接受的字符串都放到vector容器中,利用string的operator>=运算符重载来按ASCII比较字符串,利用string的size来比较字符串的长度.//根据字典排序即根据阿斯克吗值排序#include <iostream>#include <string>#include <vector>using namespace std;//长度排序bool LenSort(vector<s..

2020-12-01 17:38:10 144

原创 牛客网||斐波那契数

牛客网刷题题目****ID:45846 --Fibonacci数列链接:https://www.nowcoder.com/practice/18ecd0ecf5ef4fe9ba3f17f8d00d2d66?tpId=85&&tqId=29846&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking【题目解析】:本题是对于Fibonacci数列的一个考察,Fibonacci数列的性质是第一项和第二项都为1

2020-11-30 18:10:21 127

原创 牛客网||合法括号序列判断

牛客网刷题**题目ID:****36939-**合法括号序列判断链接:https://www.nowcoder.com/practice/d8acfa0619814b2d98f12c071aef20d4?tpId=8&&tqId=11039&rp=1&ru=/activity/oj&qru=/ta/cracking-the-coding-interview/question-ranking【题目解析】:本题考查的是对栈的应用【解题思路】:用栈结构实现,栈中

2020-11-30 18:07:58 117

原创 牛客网||字符串转整数

字符串转成整数https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&&tqId=11202&rp=6&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking【题目解析】:本题本质是模拟实现实现C库函数atoi,不过参数给的string对象【解题思路】:解题思路非常简单,就是上次计算的结果*10,相当于1

2020-11-27 20:12:27 108

原创 剑指offer||栈实现队列

用栈实现队列用两个栈实现队列思路:创建两个栈s1 s2s2用来模拟入队。s1用来模拟出队后面设计思路就非常的简单class CQueue {public: stack<int> a;//入队 stack<int> b;//出队 CQueue() { } void appendTail(int value) { a.push(value); } int deleteHead() { if(b.

2020-11-27 17:58:09 49

原创 牛客网||动态规划问题之计算最大连续和

动态规划问题之计算最大连续和**58539-**连续最大和https://www.nowcoder.com/practice/5a304c109a544aef9b583dce23f5f5db?tpId=85&&tqId=29858&rp=1&ru=/activity/oj&qru=/ta/2017test/question-ranking假设sum[j-1]是以数组中第nums[j-1]为最后一个元素的一段子数的最大和sum[j]是以数组中第nums[j]为最

2020-11-26 20:49:01 125

原创 C++||继承

继承继承(inheritance)是面向对象程序设计使代码复用的手段。它允许程序员在保持原有类特性的基础上进行扩展**,从而产生新的类,称为派生类也叫作子类。继承是设计层次的复用。1. 继承方式和访问限定符1.1继承方式分为三种1.public继承2.protected继承3.private继承1.2访问限定符1.public访问2.protected访问3.private访问2.继承基类成员访问方式的变化类成员/继承方式public继承protected继承priv

2020-11-25 19:30:02 196

原创 数据结构||顺序表和链表的异同

顺序表和链表的异同相同点:1.都是线性表 2.都有唯一的前驱和后继 3.都支持查找元素不同点:1.底层存储空间不同:顺序表底层空间是连续的链表底层空间不连续2.插入和删除方式不同:顺序表任意位置插入和删除需要搬移大量的元素,效率低,时间复杂度为O(N)链表任意位置插入和删除不需要搬移元素,效率高,时间复杂度为0(1)3.随机访问:顺序表支持随机访问,访问任意位置都为O(1)链表不支持随机访问,访问任意位置元素的时间复杂度为O(N)4.扩容:顺序表:插入的时候需要进行扩容–开辟新

2020-10-31 17:50:06 3155

原创 LeetCode||编写一个程序,找到两个单链表相交的起始节点。

编写一个程序,找到两个单链表相交的起始节点。思路:给两个指针curA和curB同时从两个链表的起始位置开始比较,如果cur1和cur2两个字节的地址相同,则为交点,否则两个指针同时往下移动b-a的节点个数 让长的先走b-a次 然后同时走.class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { //如果有一个为空则不相交 if(null

2020-10-28 13:32:34 254

原创 C||malloc calloc realloc区分

malloc calloc realloc区分相同点:1.都是C标准库提供动态内存申请的库函数2.返回值类型都是void* ,因此在使用的时候必须强转3.申请空间成功,返回空间的首地址,失败返回NULL,因此在使用时必须进行判空4.申请的空间都在堆上,使用完成后必须要使用free进行释放,否则会存在内存泄漏不同:malloc:参数申请空间大小的字节数,直接将空间申请成功返回给用户calloc:有两个参数1表示元素个数 2表示元素类型将申请好的空间全部初始化为0realloc:将ptr所指

2020-10-22 15:54:14 77

原创 LeetCode||数组求值

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]class Solution {public: vector<int> twoSum(vector<int&gt

2020-10-21 14:52:08 78

原创 C++||如何在栈上开辟空间

如何在栈上开辟空间new operator的作用:首先会在堆上开辟一段空间(调用的是operator new函数)然后调用new operator后面的typename的构造函数(如果是普通类型则不需要)最后new operator typename会返回一个指向该堆的内存地址.如果想要在栈上调用new operator:需要做的就是不让new operator调用operator new函数而是自己在栈上开辟好一段空间,然后通过调用placement new(是operator的重载)讲该空间的

2020-10-14 18:47:58 1616 3

原创 linux||linux下git提交代码

linux下git提交代码git:项目版本管理工具svn:集成式版本管理git:分布式版本管理提交代码和windows下基本一致都是三板斧克隆代码带本地(一个仓库只克隆一次)git clone git地址(个人建议克隆SSH)添加本地文件(linux下创建一个自己的目录在里面创建文件)git add 文件名提交代码到本地仓库git commit -m "本次提交备注信息"提交本地代码到服务器分支git push origin mastermaster是git项目版本的主分支

2020-09-23 17:01:19 258

原创 C++||STL_STACK_QUEUE

STL_STACK_QUEUE学习周报2STACK and QUEUE1.stack的介绍1.stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2.stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3.stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以

2020-08-24 21:10:25 157

原创 C++||STL_LIST

STL_LISTSTL_LIST1.list的介绍list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行

2020-08-22 13:04:47 83

原创 C++||STL_VECTOR

STL_VECTOR1. vector:1.1 vector 说明vector是向量类型,可以容纳许多类型的数据,因此也被称为容器(可以理解为动态数组,是封装好了的类)进行vector操作前应添加头文件#include <vector>1.2 vector初始化:方式1.//定义具有10个整型元素的向量(尖括号为元素类型名,它可以是任何合法的数据类型),不具有初值,其值不确定vector<int>a(10);12方式2.//定义具有10个整型元素的向量,且给

2020-08-21 10:35:44 190

原创 C++||STRING_study

STL_STRING1.为什么要学习string类1.1C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP( 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构)的思想。而且底层空间需要用户自己管理。稍不留神可能还会越界访问。2.标准库中的string类2.1string类1.字符串是表示字符序列的类2.标准的字符串类提供了对此.

2020-08-18 20:20:23 172 1

原创 linux||Linux 进程的概念

Linux 进程的概念本文将从以下方面来理解进程:1.进程的概念 / 什么是进程。2.如何查看进程3.进程状态 / 状态修改4.进程的优先级5.环境变量一.进程的概念 / 什么是进程 1.通俗来说,进程就是正在运行的一个程序。 2.内核观点:担当分配系统资源(CPU时间,内存)的实体 3.操作系统的角度来说,进程描述为一个结构体---->PCB(在Linux下P...

2020-02-16 17:50:13 119

原创 linux||linux基本指令笔记

1.入门指令ls -a:详细显示ls -l:显示当前文件cd …:退回上一级目录cd <file.c>:进入当前目录touch <file.c>:创建一个后缀为.c的文件mkdir:创建一个目录-m设置用户权限 -p若果路径中某些目录不存在,系统会自动创建,通常是创建父目录echo:输出重定向,默认会生成一个文件cat:显示文件内容pwd:显示当...

2019-12-13 17:36:56 100

原创 数据结构||二叉树的创建,遍历(递归)

1.TestMain.c#include"Common.h"#include"BinTree.h"int main(){ BinTree bt; BinTreeInit(&bt); /*BinTreeCreate_1(&bt);*/ /*bt = BinTreeCreate_2();*/ BinTreeCreate(&bt); printf("VLR:"...

2019-11-13 21:06:49 170

原创 C||冒泡排序算法及其优化

冒泡排序分为两步第一步是进行趟的遍历第二步就是趟内的比较优化呢,怎么说呢,没优化的代码如果给定一个有序列的数组,还是会进行遍历,浪费了时间,优化后的代码 如果判断有序,则就不会继续循环话不多说,上代码!#include<stdio.h>#include<stdlib.h>void Swap(int *a, int *b){ int tmp = *a; *...

2019-11-11 22:04:31 125

C语言学习之旅test.c

void Print(int* arr, int sz) { int i = 0; for (i = 0; i < sz; i++) { printf("%d ", arr[i]); } }

2019-08-22

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除