自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 牛客输入输出处理c++

牛客网输入输出测试专项题A+B(5)输入的第一行包括一个正整数t(1 <= t <= 100), 表示数据组数。接下来t行, 每行一组数据。每行的第一个整数为整数的个数n(1 <= n <= 100)。接下来n个正整数, 即需要求和的每个正整数。24 1 2 3 45 1 2 3 4 5#include<bits/stdc++.h>using namespace std;int main(){ int t; cin>>

2021-08-16 14:27:48 693

原创 操作系统笔记——清华学堂在线

1. 计算机存储CPU 缓存 内存 磁盘2.进程 和 线程单进程,读,解压,播放,效率低;分成三个进程,又要保持独立,又要通信实现信息共享,系统开销大,创建进程、结束、切换两个进程通信,通过系统调用,通过内核绕一圈用户空间 运行的代码,应用程序内核空间 (系统调用)管理,设备管理,文件管理,内存管理,进程线程管理用户空间的进程 和 内核空间怎么打交道?比如hello word代码运行在用户空间,当需要打开一个文件,就用系统调用,即应用程序不能直接申请系统资源,需要通过系统调用的

2021-08-11 22:28:59 152

原创 设计模式篇

这里写目录标题1.单例模式1.1单例懒汉式1.2单例饿汉式2.工厂方法模式原则:单一职责原则:类的职责单一,对外只提供一种功能开闭原则:类的改动是通过增加代码实现,而不是修改源码;对扩展开发,对修改关闭依赖倒转原则:针对接口编程,依赖抽象,不依赖具体实现创建型:如何创建对象结构型:类或对象 的组合行为:类或对象怎样交互1.单例模式一个类最多一个实例,并提供全局访问点用于:资源管理、线程池、日志管理实现方式:类的构造函数和拷贝构造函数为private,禁止外部构造实例;类内定义sta

2021-07-29 19:43:25 115

原创 排序算法+DFS+BFS

文章目录冒泡排序选择排序插入排序希尔排序快排不稳定:快选堆希冒泡排序思路:从小到大,依次选择相邻两数进行比较,前大后小,换位;一趟下列,最大的排在最后时间复杂度O(n2)空间复杂度O(1)选择排序每趟从待排序中找到最小值放在排好序末尾for (int i = 0; i < n-1; i++) { int min = i; for (int j = i; j < n; j++) { if (arr[min] > arr[j]) { min = j;

2021-07-20 16:39:19 154

原创 c++基础面试题

1.覆写和重载目的:覆写一个方法来实现不同功能,主要用于父子类,子类重写父类方法;重载(重载运算符)是同一类中方法的改写,比如1+2=3;A+B等于什么;是水平关系区别:覆写:参数列表相同,只有虚方法和抽象方法才能被覆写重载:参数列表肯定不同;函数名同2.C++和JAVA的区别最大的区别是内存管理,C++内存管理需要程序员自己控制,开辟了空间就要释放;JAVA有JVM虚拟机来管理内存。JAVA里没有多继承(只能单继承),没有指针,没有操作符重载3. Windows编程的知识点,如消息机制

2021-07-19 15:21:13 401

原创 C++默认的析构函数不是虚函数?析构函数必须是虚函数?

虚析构函数:基类指针指向子类对象,用基类指针删除子类对象纯虚析构函数:需要类内声明,类外实现,含之抽象类,不可实例化C++默认的析构函数不是虚函数?析构函数必须是虚函数?C++默认的析构函数不是虚函数目的:节省内存虚函数需要额外的虚函数表和虚表指针,占用额外的内存。对于不会被继承的类来说,将析构设置成虚函数会浪费内存。只有需要当作父类时,设置成虚函数析构函数必须是虚函数:防止内存泄漏当一个类作为父类,需要被继承,才把它的析构函数设置为虚函数,子类有开辟到堆区的属性,父类指针走不到子类的析构函数

2021-07-16 18:00:41 757

原创 数据库之mysql

这里是引用 MySQL数据库面试题(2020最新版)这里是引用https://blog.csdn.net/Shmily_0/article/details/115167610一、索引索引:帮助数据库高效获取数据的排好序的数据结构,主要用B+树(哈希范围查找不行),原因是它矮胖,数据库有好多表,每个表都有三个文件FRM MYD MYI索引覆盖:要查询的字段都有索引,引擎就不用访问原始数据,直接在索引表查询,在select后加要查询的字段索引类型主键索引:一表一个,不空,不重(可以有多个字段,列.

2021-07-16 14:38:27 121

原创 操作系统面试

进程和线程进程:运行一个程序.exe 。系统进行资源调度和分配的基本单位,即进程可以获取操作系统分配的资源,例如内存。独立分配资源的单位,运行时有独立的内存,体现操作系统并发进程特点:动态性:进程即执行一次程序,临时的,有生命周期,动态产生和消亡并发性:可以和其他进程并发执行独立性:每一个进程都有独立的内存空间结构性:它包括程序、数据、PCB(进程控制块)线程:CPU(处理机)可执行调度的最小单位,进程的子任务,多个线程共享进程的内存(堆和方法区资源),但有自己的程序计数器和栈区域,体现进程

2021-07-08 15:44:13 292

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

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。思路最重要:自己刚开始想把一个链表当原始,另一个链表元素往里插;但是从新开个头,将两个链表比较一次跟着新头头更方便将l1跟在cur后cur->next = l1;和反之的区别:cur->next是空的class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* dummyhe

2021-07-05 10:29:07 39

原创 剑指 Offer 24.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。核心:要反转,反之前未预防断点要保存该点Listbode* temp = cur->next;cur->next = pre;class Solution {public: ListNode* reverseList(ListNode* head) { ListNode * pre = nullptr; ListNode *curr = head; while

2021-07-05 09:58:56 39

原创 剑指 Offer 23 环形链表

判断有无环,若有,返回入环口思路:哈希存储查重复双指针遇见方法一:哈希,需要知道,哈希表插入操作,查重操作hash_set.insert(**)hash_set.contain(**) ListNode* cur = head; while(cur != nullptr){ if(hash_set.count(cur)) { return cur; }

2021-07-02 21:05:38 145

原创 剑指 Offer 22. 链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.思路:两次循环,先遍历长度,再遍历打印k之后的的节点一次循环使用双指针,当快指针走到末尾,慢指针刚好指向倒数k疑惑边值ListNode*

2021-07-02 20:39:34 39

原创 剑指 Offer 18. 删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。循环终止条件:while(cur->next !=NULL )class Solution {public: ListNode* deleteNode(ListNode* head, int val) { ListNode* dummyhead = new ListNode(0);//必须创建新空间吗?因为这个指针的内存空间需要分配 dumm

2021-07-02 20:24:20 41

原创 剑指 Offer 17. 打印从1到最大的n位数

输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。计数:10n次方-1pow(10,n)vector<int> printNumbers(int n) { int m = pow(10,n); int i =1; vector<int> re; while(i<m){ re.push_back(i);

2021-07-02 20:20:44 39

原创 剑指 Offer 16. 数值的整数次方

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。不得使用库函数,同时不需要考虑大数问题特殊情况考虑:x = 0 n = 0 n 为负数如果n为负数 处理:x = 1/x如果x = 0 结果返回0如果n = 0 结果返回1递归超时,改进的递归x的n次方 = x(n/2)* x(n/2)x或者x(n/2) x(n/2)if(n<0){ n = -n; x = 1/x; }

2021-07-02 20:18:14 43

原创 剑指 Offer 15 二进制中1的个数

题目:输入一个整数,输出它用二进制表示下1的个数int c = 0;int NumberOne(int n){ while(n){ if(n & 1) c++; n = n>>1; } return c;}方法二:小技巧n-1 & n能进行几次就有几个1整数减一在与之与相当于将最右边的1转成0using namespace std;int c = 0;int n = 3; int main() { while(n){ n = n

2021-07-02 17:37:06 43

原创 计算机网络面试必备

计算机网络1.HTTP一次完整请求过程1.DNS解析——由网址翻译成需要资源的主机IP地址,浏览器查找域名的IP地址2.TCP连接——根据IP地址和端口号和服务器建立TCP连接,将HTTP协议生成的请求报文进行分割成有序文段,把每个报文段可靠的传给对方,在网络层需要IP协议传送数据3.发送HTTP请求4.服务器处理请求并返回HTTP报文服务器处理请求——服务器做出应答生成HTML响应浏览器显示HTML2.状态码(返回HTTP报文)1** 信息状态 服务器收到,正在处理2** 成功   处

2021-06-30 21:48:14 211 2

原创 剑指 Offer 14- I. 剪绳子----343. 整数拆分-----动态规划

动态规划五部1.dp[i]的含义2.dp[i]递推式3.dp的初始化4.遍历顺序题目给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。分析:dp[i] 长度为i时,所得最大乘积dp[i]怎么求?分两段还是分n段= j* (i

2021-06-28 20:56:08 57

原创 剑指 Offer 12. 矩阵中的路径----回溯法(三部曲)

回溯法相关:1.函数返回值和参数2.终止条件3.横向遍历组合给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。 vector<int> r1; vector<vector<int>> result; void digui(int n, int k,int start){ if(r1.size()==k){ result.push_bac

2021-06-28 20:46:54 72

原创 剑指 Offer 11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。思路:最小值将序列分成左右递增两个序列,中间值(i+j)/2和尾值比大小; 1. 若m > end,说明m在左面,最小值在m+1 - end 2. 若m < end,说明m在右面,最小值在0-m 3. 相等,j--int minArray(vector

2021-06-27 20:40:18 46

原创 剑指 Offer 10- I. 斐波那契数列&&剑指 Offer 10- II. 青蛙跳台阶问题

1.斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.思路:自上而下有些节点重复计算;自下而上 long long fib(int n) { if(n == 0 || n==1){ return n; } long long resu

2021-06-27 16:11:55 48

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

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )思路:两个栈A、BappendTail :正常往A中插入deleteHead:看B中是否有数,若无,将A中数全部插入;此时为空返回-1;若有,直接弹出class CQueue {public: stack<int> st1;

2021-06-27 15:41:01 37

原创 剑指 Offer 06. 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。 vector<int> reversePrint(ListNode* head) { //用栈,怎么定义一个栈stack p stack<int> p; vector<int> result; ListNode* dummyhead = new ListNode(0); dummyhead->nex

2021-06-25 21:04:17 37

原创 指针基础知识-数组a和&a的区别

a和&a的地址一样,但:a表示数组首元素地址&a表示整个数组(对象)首地址a+1,偏移的是一个数组元素的大小&a+1,偏移的是整个数组的大小

2021-06-25 21:02:48 128

原创 剑指 Offer 05. 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = "We are happy."输出:"We%20are%20happy."1.思路:统计扩容大小,由后向前2.扩容大小 空格数*23.判断等于空格 s[i] = =’ ’4.新旧字符串的范围 0-s.size()-15.字符串填充复制加’ ‘6.s.size() 的长度获取字符串长度,不包含终止符,7.strlen 函数(和size()函数作用同)和 sizeof运算符区别strlen是函数,运行时出

2021-06-23 22:22:42 37

原创 剑指 Offer 04. 二维数组中的查找

1.暴力法学习vector二维数组的行列大小时间复杂度O(nm)空间复杂度O(1) bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { //怎样计算二维数组行列大小 int m = matrix.size(); int n = matrix[0].size(); for(int i = 0; i < m; i++){

2021-06-23 18:42:21 41

原创 剑指 Offer 03. 数组中重复的数字

标题找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。解决方法三种:1.排序 sort(nums.begin(),nums.end()); for(int i = 0; i < nums.size()-1; i++){ if(nums[i]==nums[i+1]) return nums[i]; }sort 基于快排,时间

2021-06-23 12:04:16 70

原创 剑指offer--赋值运算符函数(精心分析,代码备注更利于分析问题)

题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数class CMyString{public: CMyString(char* p_Data = NULL); CMyString(const CMyString& str); ~CMyString(void);private: char* m_pData;};1.题目分析1.1 那些c++类中的函数一个c++类中常见的有构造函数、拷贝构造、赋值运算符重载、析构,其中拷贝构造、赋

2021-06-11 20:27:14 99

原创 面向对象精简版

2021-06-02 19:43:30 55

空空如也

空空如也

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

TA关注的人

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