- 博客(123)
- 收藏
- 关注
转载 【操作系统】CPU 时间片 分时 轮转调度
时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。举例编辑你同时输入两篇文档:A.t
2021-08-04 11:03:31
6331
1
原创 【数据结构】B+树的特点
B+树的特点:B+树元素自底向上插入,有利于保持平衡非叶子节点的子树指针与关键字个数相同非叶子节点的子树指针p[i],指向关键字值属于[k[i],k[i+1])的子树叶子节点包含有兄弟叶子节点的指针,方便遍历所有关键字都出现在叶子节点的链表中(稠密索引),且链表中的节点都是有序的非叶子节点仅包含关键码信息,不可能在非叶子节点中命中。 非叶子节点相当于是叶子节点的索引(稀疏索引),叶子节点相当于是存储数据的数据层更适合文件索引系统为什么说B+树比B树更适合实际应用中作为操作系统的文件索引和
2021-07-31 16:10:02
2289
原创 【数据结构】C++实现LRU cache,即最久未使用
LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。Cache的容量有限。当Cache的容量用完后,而又有新的内容需要添加进来时,LRU Cache原则会挑选并舍弃最近最少使用的内容,从而腾出空间来放新内容。实现LRU Cache的方法和思路很多,但是要保持高效实现O(1)的put和get,那么使用双向链表和哈希表的搭配是最高效和经典的。因为双向链表、哈希表可以实现任意位置O(1)的插入和删除。std::list:底层实现是双向链表链表节点存储
2021-07-30 13:40:41
436
原创 【C++】关联式容器——map、set、multimap、multiset
关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对,在数据检索时比序列式容器效率更高。STL总共实现了两种不同结构的管理式容器:树型结构哈希结构树型结构的关联式容器主要有四种:map、set、multimap、multiset。这四种容器的共同点是:底层使用平衡搜索树(即红黑树),容器中的元素是一个有序的序列。set特点:set是按照一定次序存储元素的容器,默认升序,使用set的迭代器遍历set中的元素,可以得到有序序列s
2021-07-30 10:19:26
288
原创 牛客网——Rational Arithmetic (20)
牛客网——Rational Arithmetic(20)For two rational numbers, your task is to implement the basic arithmetics, that is, to calculate their sum, difference, product and quotient.输入描述每个输入文件包含一个测试用例,它在一行中给出了格式为“a1/b1 a2/b2”的两个有理数。分子和分母都在long int的范围内。如果有负号,它必须.
2021-06-05 13:15:11
341
原创 【刷题】牛客网——洗牌(现在给出一个原始牌组,请输出这副牌洗牌k次之后从上往下的序列。)
题目描述:牛客网——洗牌洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组.
2021-05-18 20:16:35
161
原创 【刷题】牛客网——查找两个字符串a,b中的最长公共子串(若有多个,输出在较短串中最先出现的那个。)
题目描述:牛客网——查找两个字符串a,b中的最长公共子串查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。//思路:动态规划经典问题,加一个start标记即可,注意将较短子串最先出现的那个输出#include <iostream>#include <vector>#include <string>using namespace std;void findMaxCommonStr(string s1, string s2){
2021-05-16 20:59:33
461
原创 力扣——692. 前K个高频单词(),合理使用map、unordered_map、multimap
题目描述:692. 前K个高频单词给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入:[“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出:[“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 "love"之前。class Solution{pub.
2021-05-14 11:30:28
117
原创 牛客网——超长正整数相加(请设计一个算法完成两个超长正整数的加法。)
题目描述:请设计一个算法完成两个超长正整数的加法。输入:string型输出:string型#include <iostream>#include <algorithm>#include <string>using namespace std;string AddLongInteger(string& str1, string& str2){ int len1 = str1.size() - 1; int len2 =.
2021-05-13 20:38:36
889
原创 【刷题】牛客网——扑克牌大小(输入两手牌,请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。)
题目描述:牛客网——扑克牌大小扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER输入两手牌,两手牌之间用"-“连接,每手牌的每张牌以空格分隔,”-"两边没有空格,如:4 4 4 4-joker JOKER。请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。 基本规则:(.
2021-05-12 22:08:19
464
原创 【刷题】力扣——二叉树进阶面试题
二叉树创建字符串/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nu..
2021-05-12 16:28:15
126
原创 关于以下代码,哪个说法是正确的?A.它会引起栈溢出 B.都不正确 C.它不能编译 D.它会引起段错误
关于以下代码,哪个说法是正确的?myClass::foo(){ delete this;}..void func(){ myClass *a = new myClass(); a->foo();}正确答案: B A.它会引起栈溢出B.都不正确C.它不能编译D.它会引起段错误解析:在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码。假设这个成员函数名字叫release,而delete this就在
2021-05-11 20:14:15
1447
原创 有一个类B继承自类A,他们数据成员如下,则构造函数中,成员变量一定要通过初始化列表来初始化的是
有一个类B继承自类A,他们数据成员如下:class A {...private: int a;};class B : public A {...private: int a;public: const int b; A &c; static const char* d; B* e;};则构造函数中,成员变量一定要通过初始化列表来初始化的是:A:b c eB:b c d eC:b dD:c eE:b cF:a b
2021-05-11 09:04:25
953
原创 【刷题】牛客网——选择题(下面代码不能正确输出hello的选项为)
题目描述:下面代码不能正确输出hello的选项为:详细解析struct str_t{ long long len; char data[32];};struct data1_t{ long long len; int data[2];};struct data2_t{ long long len; char *data[1];};struct data3_t{ long long len; void *data[];};int ma.
2021-05-10 11:28:19
494
原创 【刷题】牛客网——跳石板
https://www.nowcoder.com/questionTerminal/4284c8f466814870bae7799a07d49ec8#include <iostream>#include <vector>#include <algorithm>using namespace std;#define INT_MAX 100001int main(){ int n, m; while (cin >> n >&
2021-05-09 23:07:59
168
1
原创 【C语言入门】数据在内存中的存储方式——大端存储、小端存储(设计一个程序来判断当前机器的字节序)
int a = 0x11223344; 大端字节序存储: 把一个数的低位字节序的内容放在高地址处,把高位字节序内容放在低地址处。小端字节序存储:把一个数的低位字节序的内容放在低地址处,把高位字节序内容放在高地址处。int main(){ int a = 1; if (*(char*)&a == 1) cout << "当前机器为:小端字节序存储" << endl; else cout << "当前机器为:大端字节序存储" <&l.
2021-05-08 22:21:36
398
原创 牛客网——井字棋(对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。)
题目描述:对于一个给定的井字棋棋盘,请设计一个高效算法判断当前玩家是否获胜。给定一个二维数组board,代表当前棋盘,其中元素为1的代表是当前玩家的棋子,为0表示没有棋子,为-1代表是对方玩家的棋子。测试样例:[[1,0,1],[1,-1,-1],[1,-1,0]]返回:trueclass Board{public: bool checkWon(vector<vector<int>> board) { int row = board..
2021-04-29 18:12:17
409
原创 cpp语言求最大公因数、最小公倍数(辗转相除法)
// 最大公因数#include <iostream>using namespace std;int main(){ int A, B; cin >> A >> B; int a = A; int b = B; if(A <= B) { int tmp = A; A = B; B =tmp; } while(A % B != 0) {
2021-04-27 09:16:19
788
原创 【刷题】力扣——员工的重要性(深度优先搜索)(现在输入一个公司的所有员工信息,以及单个员工id ,返回这个员工和他所有下属的重要度之和。)
题目描述:力扣——员工的重要性给定一个保存员工信息的数据结构,它包含了员工 唯一的 id ,重要度 和 直系下属的 id 。比如,员工 1 是员工 2 的领导,员工 2 是员工 3 的领导。他们相应的重要度为 15 , 10 , 5 。那么员工 1 的数据结构是[1, 15, [2]] ,员工 2的 数据结构是 [2, 10, [3]] ,员工 3 的数据结构是 [3, 5, []] 。注意虽然员工 3 也是员工 1 的一个下属,但是由于 并不是直系 下属,因此没有体现在员工 1 的数据结构中。.
2021-04-26 11:25:17
185
原创 牛客网(剑指offer)——栈的压入、弹出序列(输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。)
题目描述:剑指offer——栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution{public: bool IsPopOrder(vector<int> pushV, vecto.
2021-04-22 16:29:37
85
原创 【刷题】牛客网——不同的子序列(给定两个字符串S和T,返回S子序列等于T的不同子序列个数有多少个?)
题目描述:经典必刷编程题库——不同的子序列给定两个字符串S和T,返回S子序列等于T的不同子序列个数有多少个?字符串的子序列是由原来的字符串删除一些字符(也可以不删除)在不改变相对位置的情况下的剩余字符(例如,"ACE"is a subsequence of"ABCDE"但是"AEC"不是)例如: S=“nowcccoder”, T = “nowccoder”,返回3...
2021-04-18 18:26:53
1285
原创 【刷题】牛客网——编辑距离(给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。)
题目描述:经典必刷编程题库——编辑距离给定两个单词word1和word2,请计算将word1转换为word2至少需要多少步操作。你可以对一个单词执行以下3种操作:a)在单词中插入一个字符b)删除单词中的一个字符c)替换单词中的一个字符...
2021-04-18 16:34:23
1031
原创 【刷题】牛客网——分割回文串II(给出一个字符串s,分割s使得分割出的每一个子串都是回文串 计算将字符串s分割成回文分割结果的最小切割数)
题目描述:经典必刷编程题库——分割回文串II给出一个字符串s,分割s使得分割出的每一个子串都是回文串 计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s=“aab”,返回1,因为回文分割结果[“aa”,“b”]是切割一次生成的。class Solution{public: bool isPal(string& s, int start, int end) { while(start < end) {
2021-04-15 20:37:16
298
原创 【刷题】LeetCode——背包问题II(有 n 个物品和一个大小为 m 的背包,给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值。 问最多能装入背包的总价值是多大?)
描述:LintCode——背包问题II有 n 个物品和一个大小为 m 的背包,给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值。 问最多能装入背包的总价值是多大?
2021-04-15 16:56:17
557
原创 【刷题】牛客网——求路径(机器人到达地图终点求路径总数)、求路径II(加入障碍求路径总数)
题目描述:一个机器人在m×n大小的地图的左上角(起点)。 机器人每次向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?(备注:m和n小于等于100,并保证计算结果在int范围内)class Solution{public: int uniquePaths(int m, int n) { int ans[m][n]; for(int i = 0; i < m; i++) {
2021-04-14 22:23:50
681
原创 【刷题】牛客网——三角形(给出一个三角形,计算从三角形顶部到底部的最小路径和)
题目描述给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字。例如,给出的三角形如下:[[20],[30,40],[60,50,70],[40,10,80,30]]最小的从顶部到底部的路径和是20 + 30 + 50 + 10 = 110经典必刷编程题库——三角形class Solution{public: int minimumTotal(vector<vector<int>>& triangle) {
2021-04-14 21:42:04
497
原创 【刷题】牛客网——拆分词句(给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词)
题目描述:给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“nowcode”;dict=[“now”, “code”].返回true,因为"nowcode"可以被分割成"now code".经典必刷编程题库——拆分词句class Solution{public: bool wordBreak(string s, unordered_set<string&
2021-04-14 20:14:32
486
原创 P187剑指offer:面试题35:复杂链表的复制
面试题35:复杂链表的复制请复制一个复杂链表。在复杂链表中,每个节点除了有一个m _pNext指针指向下一个节点,还有一个m_pSibling指针指向链表中的任意节点或者nullptr。力扣链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/class Solution{public: Node* copyRandomList(Node* head) { if(head==NULL.
2021-03-20 22:22:01
99
原创 【刷题】P187剑指offer:面试题36:二叉搜索树与双向链表
面试题36:二叉搜索树与双向链表输入一棵二叉搜索树,将该二又搜索树转换成一个排序的双向 链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。力扣链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/submissions/class Solution{public: Node* copyRandomList(Node* head) { if(head==NULL) .
2021-03-20 21:57:57
114
原创 P174剑指offer:层序遍历二叉树II:分行打印 P176:之字形打印二叉树
层序遍历二叉树II:分行打印二叉树从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。// 变量toBePrinted表示在当前层中还没有打印的节点数// 变量nextLevel表示下一层节点的数目void Print(BinaryTreeNode* pRoot){ if(pRoot == nullptr) return; std::queue<BinaryTreeNode*> nodes; nodes.push(p.
2021-03-19 22:25:12
134
原创 P127剑指offer:面试题20:表示数值的字符串
面试题20:表示数值的字符串:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“1e-16”都表示数值,但“12e”、“1a3.14”、“1.2.3”、“+5”及“12e+5.4”都不是。bool scanUnsignedInteger(const char** str);bool scanInteger(const char** str);// 数字的格式可以用A[.[B]][e|EC]或者.B[e|EC]表示.
2021-03-18 09:57:28
70
原创 P110剑指offer:位运算:面试题16:数值的整数次方
面试题16:数值的整数次方题目:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。全面但不够高效的代码// 全局变量:判断返回值是否为异常值// 比如返回值0.0// ( base==0.0 && exponent<0 )属于异常情况bool g_InvalidInput = false;// 判断两个浮点数是否相等,不能使用"=="bool equa
2021-03-17 15:38:42
115
原创 如何判断两个浮点数是否相等:绝对误差 + 相对误差
不能用等号判断两个小数是否相等bool isEqual(const double a, const double b){ const eps_0 = 1.0e-6, rel_error = 10e-4; bool isEqualFlag = FALSE; if(fabs(a-b)<=eps_0) { isEqualFlag = TRUE; } else{ if(fabs(a) >= 1000.0) .
2021-03-17 11:07:23
2478
原创 P94剑指offer:动态规划与贪婪算法:面试题14:剪绳子
动态规划与贪婪算法可以应用动态规划求解的问题具备以下三个特点:1、求一个问题的最优解2、整体问题的最优解是依赖各个子问题的最优解3、把大问题分解成若干个小问题,这些小问题之间还有相互重叠的更小的子问题4、从上往下分析问题。从下往上求解问题。这是由于子问题在分解大问题的过程中重复出现,为了避免重复求解子问题,我们可以用从下往上的顺序先计算小问题的最优解并存储下来,再以此为基础求取大问题的最优解。面试题14:剪绳子题目:给你一根长度为n的绳子,请把绳子剪成m段(m, n都是整数,n &g
2021-03-16 21:39:15
115
原创 P89剑指offer:回溯法:面试题12:矩阵中的路径(详解)
题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格 那么该路径不能再次进入该格子。#include <cstdio>#include <string>#include <stack>using namespace std;// 判断矩阵内当前字符是否为路径中对应的字符bool hasPathCore(const c.
2021-03-16 16:33:12
145
原创 使用 char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题?
使用 char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题?A.会有内存泄露B.不会有内存泄露,但不建议用C.编译就会报错,必须使用delete []pD.编译没问题,运行会直接崩溃分析:当用delete来释放用new int[]申请的内存空间时,由于其为基本数据类型没有析构函数,所以使用delete与delete []相同,两者都会释放申请的内存空间若是自定义的数据类型,有析构函数时,用new []申请的空间,必须要用delete []来释放
2021-03-16 09:15:04
3835
原创 C++的动态分配和静态分配:没有静态分配的堆
动态内存分配指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。动态内存分配相对于静态内存分配的特点1、不需要预先分配存储空间2、分配的空间可以根据程序的需要扩大或缩小内存的静态分配和动态分配的区别1、时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。2、空间不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配
2021-03-16 08:59:16
305
原创 C语言:生成随机数(并非固定的随机数)——rand()、srand()
C语言入门:生成随机数1.rand() 函数2.srand() 函数3.生成一定范围内的随机数在实际编程中,我们经常需要生成随机数。1.rand() 函数在C语言中,我们一般使用 <stdlib.h> 头文件中的 rand() 函数来生成随机数,它的用法为:int rand (void);rand() 会随机生成一个位于 0 ~ RAND_MAX 之间的整数。RAND_MAX 是 <stdlib.h> 头文件中的一个宏,它用来指明 rand() 所能返回的随机数的最大
2021-03-14 10:45:40
114072
3
原创 【编程】C++入门:static 全局区(静态区)什么时候释放?
static 全局区(静态区)什么时候释放?静态局部变量在程序开始执行的时候就始终存在,也就是说它的生命期为整个源程序。静态局部变量的生命期虽然为整个源程序,但是其作用域仍与自动变量相同。静态局部变量的初始化是在编译时进行的。在定义时用常量或者常量表达式进行赋值。未赋值编译时系统自动赋值为0静态局部变量具有可继承性。...
2021-03-08 10:29:38
3614
原创 【编程】数据结构入门:快速排序(递归3种、非递归1种)归并排序(递归、非递归)
快速排序(递归3种)// Pointer排序——快速排序int ReferencePositionPointer(int* arr, int begin, int end){ int prev = begin; int cur = begin + 1; int refvalue = arr[begin]; while (cur <= end) { if (arr[cur] < refvalue && ++prev != cur) { Swap(arr
2021-03-04 09:09:54
131
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅