自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode 611 有效三角形的个数

有效三角形的个数先上题目这道题让我发现

2022-04-09 11:18:08 941

原创 线程的同步机制

线程怎么实现同步前文有提到,一个进程中的各个线程都有共享的资源而且是完全开放的,那么在进程运行中会出现多个线程访问同一个公共资源的问题。这种现象我们称之为线程之间产生了资源竞争,这种竞争会导致程序异常甚至崩溃。Linux提供了相应的解决方案,来确保每个线程能同步的访问进程提供的公共资源,线程同步。简而言之,就是排排队大家一个一个来!线程同步四种方法:互斥锁信号量条件变量读写锁互斥锁:又称互斥体或互斥量,是最简单的一种线程同步机制,顾名思义,当一个线程访问的时候,就会把资源“锁”上,直到

2022-03-29 16:13:52 1583

原创 线程、进程、多线程

多线程什么是进程?“线程”这个名词随着计算机的发展诞生于1967年左右。单独一台计算机的能利用资源是有限的,所以如何有效提高计算机资源的利用率至关重要!一开始计算机的资源利用主要受到管理员的调度,如果管理员没要下达指令很多硬件资源都处于一种空闲状态,导致了大量的浪费。后来人们设计了批处理操作系统,代替管理员进行调度和任务切换。但是,CPU仍然处于一个空闲状态,比如执行程序进行I/O操作时,只能等待操作完成才能继续工作,这个时间CPU资源没有得到有效的利用。在批处理基础上,设计了多道批处理操作系统,这

2022-03-28 21:21:52 132

原创 C++多态与虚函数

面向对象面向对象的三大特征:封装,继承,多态,这三种机制能有效提升程序的可读性、可扩充性和可重用性。多态指的同一个名字的事物可以完成不同的功能。多态可以分为编译时的多态和运行时的多态。编译多态:函数重载,运算符重载,对重载函数的调用,在编译的时候能根据实参确定应该调用哪个函数,这叫做编译时的多态。运行多态:继承,虚函数可以这么理解:运行时的多态就是基类的指针指向派生类。虚函数如果基类的指针指向派生类,那么我们应该能使用派生类的成员变量和成员函数,但是现实情况是不能使用派生类的成员函数。比如

2022-03-22 15:09:15 952

原创 Linux如何用g++编译c++文件

安装g++编译器我采用的Centos系统没有默认的g++编译器。首先你可以看一下自己当前环境是否安装了g++打开Terminal终端执行如下命令[root@yanlong~]#which g++/usr/bin/g++如果未安装可以在终端执行如下命令:yum install gcc-c++如果提示你需要root权限,可以输入su命令进行root用户模式g++命令执行C++项目c或c++项目的执行过程分成四步,依次是预处理,编译,汇编和链接c++编程中文件有头文件(.h后缀)和源文件(

2022-03-21 20:01:33 2580

原创 磁盘和内存(二)

磁盘和内存(二)节约内存的方式虚拟内存的局限性:虚拟内存的“Page In”和“Page Out”操作会伴随大量的低速磁盘读取操作,没办法从根本上解决内存不足的问题。解决内存不足的方式有两种:1.加内存条(要钱)2.优化程序DLL动态链接库DLL(Dynamic Link Library)文件,是一种动态链接库文件,在程序运行时可以动态加载Library(函数和数据的集合)的文件。多个应用可以共用一个DLL文件,通过共用一个DLL文件则可以达到节约内存的效果。例子:编写一个功能函数Func()。

2022-03-17 16:45:44 471

原创 磁盘和内存(一)

磁盘和内存共同点:磁盘和内存都具有存储功能区别:存储方式:内存,通过电流来实现存储磁盘,通过磁记录技术来实现存储造假和读取速度:内存:高速而且昂贵磁盘:低俗而且低廉断电:内存:数据会丢失,内部存储设备磁盘:可以长久保留,外部存储设备一般我们说的内存,就是指主存,存储cpu处理程序和数据。程序不读入内存就无法运行存储程序方式:我们程序是保存存储设备中,通过使用cpu读入实现的程序指令计算机最重要的存储设备:磁盘和内存磁盘:磁盘中程序必须加载到内存中才能运行,主要是因为负责解析和

2022-03-17 15:54:04 714

原创 数组中出现次数超过一半的数字

数组中出现次数超过一半的数字题目描述:一道简单难度的数组题,但面试要求空间复杂度一般为O(1)解题思路:1.排序2.摩尔投票3.哈希表4.随机数法5.位运算1.排序算法思路:将所给数组进行排序,取中位数,即为众数,众数出现频率一定大于数组大小的一半代码实现:class Solution {public: int majorityElement(vector<int>& nums) { sort(nums.begin(), nums.en

2022-03-16 15:15:59 638

原创 从上到下打印二叉树

从上到下打印二叉树一道二叉树的基础题 简单:)题目描述解题思路:这是一道基础的二叉树的题目。主要是考察的是二叉树的遍历方法,我们知道有两种,BFS和DFS,题目要求从上到下打印,很显然这题是属于层序遍历,我们要用到广度优先搜索BFS。BFS我们一般用队列进行实现。算法流程1.边界:判断根节点是否为空,为空就返回{}2.定义容器:res保存最终结果3.创建队列:queue4.BFS循环循环出口:当队列为空时退出循环得到并保存队首元素 q.front()出队:q.pop()将队首元素

2022-03-16 13:02:16 104

原创 重建二叉树

一道经典的分治法重建二叉树的题目重建二叉树题目描述阅读题目后先抓住关键信息,已知前序遍历和中序遍历。简单复习下前序,中序,后序的规律,分别是根 左右 、左 根 右、左右 根。通过前序遍历的第一个结点我们可以得到根节点,中序遍历我们可以根据得到的根结点的位置来划分区间,在根节点左侧的是左子树区间,在根节点右侧的是右子树区间解题思路前序遍历有个特点,第一个结点就是根节点。那么我们可以通过哈希表存储得到的根节点的位置。通过根节点的位置我们可以计算左子树的长度,同时将存储的数组分成左右两段,分别对左

2022-03-15 14:16:28 623

原创 二维数组查找元素

二维数组查找元素题目描述解题思路:有两种方法,暴力枚举O(NM)和线性查找O(N+M)这里只讲解线性查找的方法。暴力的话就直接遍历,在实际面试中是不可取的。那么怎样去分析这种升序二维数组查找元素的通法。算法流程:1.首先找到最右上角的元素,array[ i ][ j ],要找的target可以与其做比较对二维数组进行分析可以发现每一行中最右边的元素是最大的,严格单调增2.target比最右边这个元素要小,那么j-- 就是列减少我们倒着遍历这一行每个元素,直到找到最终的target3.ta

2022-03-15 13:27:31 2646

原创 找出数组的重复元素

主要是记录一些刷题心得找出数组的重复元素这是一道剑指offer上的一道简单题1.交换法算法流程:首先数组是无序的1.需要将对应下标和对应元素进行交换,如果num[i]和num[num[i]]不相等,就将这两个值进行交换。直到交换完毕。2.判断num[i]和i相不相等,不相等就说明有重复元素,直接返回num[i]的值。关于边界问题,数字是属于(0 ~ n-1)的范围,所以迭代nums的元素时候判断 x < 0 或 x > n - 1的情况。时间复杂度:O(N),空间复杂度:O(

2022-03-14 15:49:03 831

空空如也

空空如也

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

TA关注的人

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