自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

金金金金金的博客

程序员本程序员

  • 博客(351)
  • 资源 (1)
  • 收藏
  • 关注

原创 【GPGPU编程模型与架构原理】第二章 2.1 计算模型

本章介绍以CUDA和OpenCL 并行编程中的一些核心架构概念来展示GPGPU的计算、编程和存储模型。本章还介绍虚拟指令集和机器指令集,逐步揭开GPGPU体系结构的面纱。

2022-11-19 16:49:22 1958 1

原创 【GPGPU编程模型与架构原理】第一章 1.3 现代 GPGPU 产品

世界最大的两家图形芯片提供商:美国的NVIDIA 和AMD公司在桌面和工作站GPU和GPGPU遥遥领先。除此之外,Intel 公司主要发展集成显卡业务,其他公司在嵌入式GPU迅速发展。

2022-11-19 15:08:28 1299

原创 【GPGPU编程模型与架构原理】第一章 1.2 GPGPU 发展概述

随着半导体工艺水平不断提高和计算机体系结构设计的不断创新,GPU快速发展,从传统图形图像相关的三维图形渲染专用加速器拓展到多种应用领域,形成通用的图形处理器。

2022-11-14 23:11:49 1371

原创 【GPGPU编程模型与架构原理】第一章 1.1 GPGPU 与并行计算机

并行体系结构

2022-11-09 22:01:06 1919

原创 【力扣】[二叉树] LeetCode109. 有序链表转换二叉搜索树

1、题目给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree 2、思路分析1)二分/** * Definition for singly-linked list. * struct ListNode { * i

2021-09-23 15:40:22 159

原创 【力扣】[回溯] LeetCode254. 因子的组合

1、题目请实现一个函数,该函数接收一个整数 n 并返回该整数所有的因子组合。链接:https://leetcode-cn.com/problems/factor-combinations/ 2、思路分析class Solution {public: vector<vector<int>> dfs(int n, int k) { vector<vector<int>> res; int i =

2021-09-21 20:46:27 299

原创 【力扣】[回溯] LeetCode93.复原 IP 地址

1、题目给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “[email protected]” 是 无效 IP 地址。链接:https://leetcode

2021-09-18 19:50:32 402

原创 【力扣】关于二叉树的最近公共祖先问题

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 235. 二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), ri..

2021-09-18 13:13:16 109

原创 【C++】翻转汉字(包含字符和汉字)

C语言数组实现void Reverse(char str[]){ int len = strlen(str); int l = 0, r = len - 1; char temp[str_len]; while (l < len) { if (str[l] > 0){ // 非汉字 temp[r--] = str[l++]; } else{ // 汉字 temp[r - 1] = str[l]; temp[r] = str[l + 1];

2021-09-18 12:45:44 313

原创 【力扣】LeetCode450.删除二叉搜索树中的节点

1、题目给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:首先找到需要删除的节点;如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。链接:https://leetcode-cn.com/problems/delete-node-in-a-bst 2、思路1)递归class Solution {pub

2021-09-16 18:54:28 96

原创 【C++】双目运算符+=的重载(包含友元)

文章目录1、+=重载2、friend重载+=3、运算符3.1 单目运算符3.2 双目运算符3.3 三目运算符4、重载++和重载- -1、+=重载class Complex{public: Complex(int a, int b) : _a(a) , _b(b) {} Complex& operator+= (Complex& other) { this->_a += other._a; this->_b += other._b; retur

2021-09-15 21:59:42 3314

原创 【linux】linux下head和tail命令详解

1、test1.txt 文件的内容 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 10 g 11 k 12 l 13 m2、head命令命令1 :head test1.txt命令2:head -n 3 test1.txt命令3:head -n +3 test1.txt命令4:head -n -3 test1.txt命令5:head -c 4

2021-09-15 20:11:15 384

原创 【C语言】测试

1、数组int main(){ char a[] = "Metax"; char* b = "Metax"; char* c[] = { "Metax", "Tech" }; char d[5] = { 'M', 'e', 't', 'a', 'x' }; printf("%d, %d, %d, %d\n", sizeof(a), sizeof(b), sizeof(c), sizeof(d)); return 0;} 2、三维数组int main(){ int a

2021-09-15 19:31:34 443

原创 【面经总结】C++小点随时记录

1、隐式类型转换和显式类型转换隐式类型转换由编译器自动进行,不需要程序员干预。隐式类型转换通常有两种情况:赋值转换和运算转换。1)赋值转换:将一种类型的数据赋值给另外一种类型的变量时,发生隐式类型转换。比如:int x = 1.23; // 1.23是double类型,先隐式转换为intfloat y = 66; // 66是int类型,先隐式转换为float在对变量赋值时,若等号两边的数据类型不同,需要把右边表达式的类型转换为左边变量的类型,这可能会导致数据失真(精度降低),所以隐式类型转换不

2021-09-13 21:55:34 108

原创 【C++】柔性数组

文章目录1、柔性数组2、柔性数组特性3、柔性数组的优势4、柔性数组的使用1、柔性数组C99 中,结构中的最后一个元素允许是未知大小的数组,这就叫做柔性数组成员。柔性数组定义typedef struct st_type{ int i; int a[0];//柔性数组成员:有些编译器会报错,用下面的}type_a;typedef struct st_type{ int i; int a[];//柔性数组成员}type_a;柔性数组成员需要用 malloc() 对其

2021-09-08 22:58:52 691

原创 【操作系统】内存泄漏和内存溢出

1、内存泄漏内存泄漏(memory leak)指是指程序在申请内存后,因疏忽或错误造成已申请的内存空间无法释放,导致应用程序对该空间失去控制,因而造成了内存的浪费。内存泄漏最终会导致内存溢出。 2、内存泄漏的分类堆内存泄漏:程序执行开辟中new / malloc / realloc开辟的空间,没有释放系统资源泄漏:系统分配的资源,例如:套接字、文件描述符,没有释放 3、内存泄漏的危害1)导致程序运行崩溃:一旦内存不足以为某些对象分配所需要的空间,将会导致程序崩溃,造

2021-09-08 20:10:52 926

原创 【力扣】[链表] 92. 反转链表 II

1、题目给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。链接:https://leetcode-cn.com/problems/reverse-linked-list-ii 2、思路分析1)穿针引线找到开始的位置和结束的位置,将开始的前一个位置标记起来,结束的位置的下一个位置标记起来,将 start 和 end 之间的链表反转,写一个函数。反

2021-09-05 15:35:57 133

原创 【力扣】[动态规划] LeetCode368. 最大整除子集

1、题目给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。链接:https://leetcode-cn.com/problems/largest-divisible-subset 2、思路分析1)如果整

2021-09-02 16:18:43 170

原创 【C语言】函数指针和回调函数

1、为什么要有函数指针我们都知道,程序=数据结构+算法。在没有C++语言的年代,没有面向对象、模板的语法支持,struct中还不能定义函数,用C语言想要对业务功能(算法,此处即指函数)进行抽象,不想依赖具体的数据结构/数据类型,此时就必须用指向函数的指针来实现抽象与具体的分离(该函数的入参可以是void*,这样调用者就可以传入任意类型的参数了)。后来有了C++,就用类成员函数和泛型(模板+functor)来代替了,这样做有更强的静态类型检查机制和编程约束,有利于减少滥用风险。(函数指针的一个典型应用

2021-08-31 12:59:15 203

原创 【力扣】LeetCode166.分数到小数

1、题目给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以 字符串形式返回小数 。如果小数部分为循环小数,则将循环的部分括在括号内。如果存在多个答案,只需返回 任意一个 。对于所有给定的输入,保证 答案字符串的长度小于 104 。链接:https://leetcode-cn.com/problems/fraction-to-recurring-decimal 2、思路分析1)长除法class Solution {public: st

2021-08-29 20:56:03 161

原创 【力扣】[动态规划] 97. 交错字符串

1、题目给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。两个字符串 s 和 t 交错 的定义与过程如下,其中每个字符串都会被分割成若干 非空 子字符串:s = s1 + s2 + … + snt = t1 + t2 + … + tm|n - m| <= 1交错 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …提示:a + b 意味着字符串 a 和 b 连接

2021-08-29 18:52:11 70

原创 【力扣】[动态规划] 95.不同的二叉搜索树 II

1、题目给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。链接: https://leetcode-cn.com/problems/unique-binary-search-trees-ii/ 2、思路分析1)回溯我们定义 generateTrees(start, end) 函数表示当前值的集合为 [start,end],返回序列 [start,end] 生成的所有可行的二叉搜索树。我们考虑枚举

2021-08-29 09:35:59 97

原创 【二叉树】N叉树的后序遍历

 N叉树的前序遍历 1、题目给定一个 N 叉树,返回其节点值的 后序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。链接: https://leetcode-cn.com/problems/n-ary-tree-postorder-traversal/ 2、思路分析1)递归/*// Definition for a Node.class Node {public: int val; v

2021-08-27 15:30:36 82

原创 【二叉树】N叉树的前序遍历

1、题目给定一个 N 叉树,返回其节点值的 前序遍历 。N 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值 null 分隔(请参见示例)。链接:https://leetcode-cn.com/problems/n-ary-tree-preorder-traversal/ 2、思路解析1)递归/*// Definition for a Node.class Node {public: int val; vector<Node*> childr

2021-08-27 15:22:53 119

原创 【力扣】[栈] LeetCode678.有效的括号字符串

1、题目给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:任何左括号 ( 必须有相应的右括号 )。任何右括号 ) 必须有相应的左括号 ( 。左括号 ( 必须在对应的右括号之前 )。可以被视为单个右括号 ) ,或单个左括号 ( ,或一个空字符串。一个空字符串也被视为有效字符串。链接:https://leetcode-cn.com/problems/valid-parenthesis-string 2、思路分析

2021-08-24 17:57:07 112

原创 【力扣】[栈] 496.下一个更大元素 I

1、题目给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。链接:https://leetcode-cn.com/problems/next-greater-element-i 2、思路分析1)暴力求解不推荐,这里题目的进阶

2021-08-24 15:42:20 68

原创 【力扣】[栈] 456. 132模式

1、题目给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。链接:https://leetcode-cn.com/problems/132-pattern 2、思路分析class Sol

2021-08-20 10:27:00 65

原创 【力扣】[栈] 402.移掉K位数字

1、题目给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。链接:https://leetcode-cn.com/problems/remove-k-digits/ 2、思路分析1)贪心+单调栈使用vector的方式模拟栈,在拼接的时候更好用。要使得最后得到的数字最小,一定要保持升序的状态,那么一遇到小的数字,就要将前面的数字前面出栈,出栈的次数k决定。这里一定不要用int类型的,大概率是会越

2021-08-18 17:31:15 132

原创 【力扣】[栈] LeetCode445.两数相加 II

1、题目给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。链接:https://leetcode-cn.com/problems/add-two-numbers-ii 2、思路分析1)栈一般逆序处理首先想到栈。这题不让用逆序,所以就想到了栈。class Solution {public: ListNode* addTwoNumbers(

2021-08-18 11:37:02 196

转载 【linux】什么是协程?为什么要引入协程?

1、什么是协程?协程跟线程都代表一个执行序列。不同的是,协程把线程中不确定的地方尽可能的去掉,执行序列间的切换不再由CPU隐藏的进行,而是由程序显式的进行。所以,使用协程实现并发,需要多个协程彼此协作。 2、为什么要引入协程?我们知道操作系统在线程等待IO的时候,会阻塞当前线程,切换到其它线程,这样在当前线程等待IO的过程中,其它线程可以继续执行。当系统线程较少的时候没有什么问题,但是当线程数量非常多的时候,却产生了问题。一是系统线程会占用非常多的内存空间,二是过多的线程切换会占用大量的

2021-08-16 15:22:26 1394

原创 【力扣】[栈] 316.去除重复字母

1、题目给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。链接:https://leetcode-cn.com/problems/remove-duplicate-letters/ 2、思路分析1)模拟栈num数组记录字符串s中的字母的个数,vis记录数组中是否出现过这个字母对于当前出现的字母,如果 vis 中出现,则不处理,将num中对应的字母 -1;如果 vis 没有出现,判断 stk.ba

2021-08-16 11:48:15 215

原创 【力扣】[栈] 232.用栈实现队列

1、题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false链接:https://leetcode-cn.com/problems/implement-queue-using-st

2021-08-16 10:31:43 47

原创 【力扣】[栈] 225.用队列实现栈

1、题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。链接:https://leetcode-cn.com/problems/implement-stack-using-qu

2021-08-15 18:00:56 54

原创 【力扣】[二叉树] 144.二叉树前序遍历(迭代)

1、题目给你二叉树的根节点 root ,返回它节点值的 前序 遍历。链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/ 2、思路分析/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeN

2021-08-15 11:59:09 125

原创 【力扣】[二叉树] 145.二叉树的后序遍历(迭代)

1、题目给定一个二叉树,返回它的 后序 遍历。链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/ 2、思路分析/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : va

2021-08-15 11:55:39 59

原创 【计算机网络】物理层详解

文章目录1、物理层的基本概念1.1 传输媒体接口相关的特性2、数据通信的基本知识2.1 数据通信系统的模型2.2 有关信道的几个基本2.3 信道的极限传输速率C3、物理层下面的传输媒体4、信道复用技术4.1频分复用、时分复用、统计时分复用4.2 波分复用4.3 码分复用5、数字传输系统6、宽带接入技术本章讨论的是有关数据通信的重要概念以及各种传输媒体的主要特点,但传输媒体本身不在传输层的范围。1、物理层的基本概念物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体。

2021-08-14 11:32:09 727 1

原创 【计算机网络】数据链路层详解

2、数据链路层2.1 以太网以太网不是具体的网络,而是一种技术标准。包含数据链路层和物理层的内容。例如:规定了网络拖拓扑结构、访问控制方式、传输速率以太网是当前最广泛的局域网技术,还有令牌环网,无限LAN等。2.2 以太网数据帧格式1)源地址和目的地址:MAC地址(48位)2)类型08xx协议类型0806ARP请求0835ARP应答0800ip协议2.3 MTU1)以太网帧中的数据长度规定最小46字节,最大1500字节(如果不够46字节,则要在后

2021-08-13 12:28:53 1956

原创 【高级数据结构】B-树、B+树详解

B树1、概念B树是一种自平衡树数据结构,它维护有序数据并允许以对数时间进行搜索,顺序访问,插入和删除。B树是二叉搜索树的一般化,因为节点可以有两个以上的子节点。与其他自平衡二进制搜索树不同,B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统。它通常用于数据库和文件系统。 2、特性B树是一种平衡的多分树,通常我们说m阶的B树,它必须满足如下条件:每个节点最多只有m个子节点。每个非叶子节点(除了根)具有至少⌈ m/2⌉子节点。如果根不是叶节点,则根至少有两个子节点。具有k个

2021-08-12 21:21:29 832

原创 【高级数据结构】并查集

1、并查集并查集(Union-find Sets)是一种非常精巧而实用的数据结构,它主要用于处理一些不相交集合的合并问题。并支持两种操作:合并(Union):把两个不相交的集合合并为一个集合。查询(Find):查询两个元素是否在同一个集合中。 2、存储结构负数表示根,跟位置的绝对值表示树的节点个数。孩子存储父亲的下标。上述并查集的部分树结构,其他均是一个单节点。 3、并查集的实现#include <iostream>#include <ve

2021-08-12 17:26:57 58

原创 【计算机网络】传输层详解

文章目录3、传输层----UDP协议3.1 UDP协议3.2 UDP协议数据协议格式3.3 校验和3.4 udp缓冲区3.5 基于UDP的应用层协议3.6 问题总结4、传输层----TCP协议4.1 TCP协议特性4.2 TCP协议段格式4.3 连接管理机制4.4 保证可靠传输4.5 提高发送速率4.6 捎带应答和延时应答4.7 TCP粘包问题3、传输层----UDP协议传输层:是负责端与端之间的连接(端口),传输层只负责端口,不负责网络。网络数据在传输过程中的五元组信息:源端口,目的端口,源ip,目

2021-08-09 20:05:56 2135

第一篇博客.doc

这是一篇不忘初心的博客。第一次写博客的我还是不那么从容。

2019-10-08

空空如也

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

TA关注的人

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