算法题题型总结
二叉树题型
解法综述:二叉树的解法,基本上都是依赖遍历,再加上递归的思路来做的。那递归又分为深度优先和广度优先。深度优先算法,前序,中序,后序。广度优先,利用先进先出队列,一层一层的遍历完整颗树。
深度优先
1. 求二叉树的最大深度
class Solution {public int maxDepth(TreeNode root) {return deep(root, 0);}public int deep(TreeNode node, int deep){if (node == null) {return deep;}return Math.max(deep(node.left, deep + 1), deep(node.right, deep + 1));}
}
2. 是否是相同的树
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {return isSame(p, q);}public boolean isSame(TreeNode p, TreeNode q){if (p == null && q == null) {return true;}if ((p == null && q != null) || (p != null && q == null)) {return false;}return p.val == q.val && isSame(p.left, q.left) && isSame(p.right, q.right);}}
3. 求根节点到叶节点数字之和
class Solution {public int sumNumbers(TreeNode root) {return sum(root, 0);}public int sum(TreeNode node, int sum){if (node == null) {return 0;}if (node.left == null && node.right == null) {return 10*sum + node.val;}return sum(node.left,node.val + sum * 10) + sum(node.right, node.val + sum * 10);}
}
广度优先
1. 填充每个节点的下一个右侧节点指针
class Solution {public Node connect(Node root) {if (root == null) {return null;}LinkedList<Node> list = new LinkedList<>();list.add(root);while(list.size()!=0){int size = list.size();Node pre = null;for (int i=0; i<size; i++) {Node cur = list.poll();if (pre != null) {pre.next = cur;}if (cur.left != null) {list.add(cur.left);}if (cur.right != null) {list.add(cur.right);}pre = cur;}}return root;}
}
2. 二叉树的右视图
class Solution {public List<Integer> rightSideView(TreeNode root) {if (root == null) {return new ArrayList<>();}LinkedList<TreeNode> list = new LinkedList<>();list.add(root);List<Integer> resList = new ArrayList<>();while(!list.isEmpty()){int size = list.size();for(int i=0; i<size; i++){TreeNode node = list.poll();if (node.left != null) {list.add(node.left);}if (node.right != null) {list.add(node.right);}if(i==(size-1)){resList.add(node.val);}}}return resList;}
}
3. 二叉树的层平均值
class Solution {public List<Double> averageOfLevels(TreeNode root) {return average(root);}//offer -- add 加在队列的尾部//poll -- 从队列的头部取元素//pop -- 从队列的头部取元素//push -- 放在队列头部public List<Double> average(TreeNode root){List<Double> res = new ArrayList<Double>();LinkedList<TreeNode> list = new LinkedList<TreeNode>();list.add(root);while(list.size() != 0){int size = list.size();double sum = 0.0;for (int i=0; i<size; i++) {TreeNode node = list.poll();sum = sum + node.val;if (node.left != null) {list.add(node.left);}if (node.right != null) {list.add(node.right);}}res.add(sum/size);}return res;}
}
二分查找
解法综述:首先要基于一个有序数组或者是要局部有序的场景,才能比较适合实用二分查找。然后需要通过数组的左边界和右边界确定数组的中间值,再与目标值进行对比。然后不断地调整左右边界,直到左边界大于右边界。
1. 搜索插入位置
class Solution {public int searchInsert(int[] nums, int target) {int left = 0;int right = nums.length -1;int mid = 0;int ans = nums.length;while(left<=right){mid = left + (right - left)/2;if (target <= nums[mid]) {right = mid - 1;ans = mid;} else {left = mid + 1;}}return ans;}
}
2. 寻找峰值(这就是一个局部有序的场景)
class Solution {public int findPeakElement(int[] nums) {int n = nums.length;int left = 0, right = n - 1, ans = -1;while (left <= right) {int mid = (left + right) / 2;if (compare(nums, mid - 1, mid) < 0 && compare(nums, mid, mid + 1) > 0) {ans = mid;break;}if (compare(nums, mid, mid + 1) < 0) {left = mid + 1;} else {right = mid - 1;}}return ans;}int[] get(int[] nums, int a){if (a < 0 || a > nums.length - 1) {return new int[]{0,0};}return new int[]{1, nums[a]};}public int compare(int[] nums, int a, int b){int[] ar = get(nums, a);int[] br = get(nums, b);if (ar[0] > br[0]) {return 1;} else if (ar[0] == br[0] ) {if (ar[1] > br[1]) {return 1;} else if (ar[1] == br[1]) {return 0;} else {return -1;}} else {return -1;}}
}
堆
class Solution {public int findKthLargest(int[] nums, int k) {//第一次大顶堆要完整构建//第k-1次大顶堆,使用局部构造大顶堆的方式进行//构建好了大顶堆要,交换,并且长度要减1//剔除到第k次时,就是第k个最大值int length = nums.length;buildMaxHeap(nums, length);swap( 0, length - 1, nums);length = length - 1;for(int i =0 ; i<k-1;i++){buildSubMaxHeap(nums, 0,length);swap( 0, length - 1, nums);length = length - 1;}return nums[nums.length-k];}void buildMaxHeap(int[] nums, int length){int start = length/2 - 1;for (int i = start ; i >=0; i--) {buildSubMaxHeap(nums, i, length);}}void buildSubMaxHeap(int[] nums, int pos,int length){int left = 2 * pos + 1;int right = 2 * pos + 2;int large = pos;if (left<length && nums[left] > nums[large]) {large = left;}if (right<length && nums[right] > nums[large]) {large = right;}if (large != pos) {swap(large, pos, nums);buildSubMaxHeap(nums, large, length);}}void swap(int a, int b , int[] nums){int temp = nums[a];nums[a] = nums[b];nums[b] = temp;}
}
链表
解法综述:
1. 单链表,有两个指针,一个快,一个慢。或者一个pre,一个cur
2. 双链表,有两个指针,一个快,一个慢
3. 使用递归 + map的方式来解
4. 需要使用3个指针,pre,cur,next
5. LRU缓存-涉及到的数据结构很多,最好还是使用LinkedHashMap实现
单链表,有两个指针,一个快,一个慢
1. 环形链表
public class Solution {public boolean hasCycle(ListNode head) {if (head == null || head.next == null) {return false;}ListNode first = head;ListNode second = head.next;while (second != null) {if (first == second) {return true;}first = first.next;if (second.next != null) {second = second.next.next;} else {second = second.next;}}return false;}
}
2. 删除链表的倒数第n个节点
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode newHead = new ListNode();newHead.next = head;ListNode fast = head;ListNode slow = head;for (int i=1; i<n; i++) {if (fast != null) {fast = fast.next;} else {return newHead.next;} }ListNode pre = newHead;while(fast.next!=null){fast=fast.next;slow = slow.next;pre = pre.next;}pre.next = slow==null?null:slow.next;return newHead.next;}
}
3. 旋转链表
class Solution {public ListNode rotateRight(ListNode head, int k) {ListNode f = head;ListNode s = head;int l = 0;ListNode cur = head;while(cur!=null){l++;cur = cur.next;}if (l==0) {return head;}int nk = k%l;if (l==0 || l==1 || nk==0) {return head;}for (int i=1; i<nk; i++) {f = f.next;}ListNode newHead = new ListNode();newHead.next = head;ListNode pre = newHead;while(f.next != null){f = f.next;s = s.next;pre = pre.next;}pre.next = null;f.next = head;return s;}
}
一个pre,一个cur
class Solution {public ListNode deleteDuplicates(ListNode head) {ListNode newHead = new ListNode();newHead.next = head;ListNode cur = newHead;while(cur.next != null && cur.next.next != null){if (cur.next.val == cur.next.next.val) {int val = cur.next.val;cur.next = cur.next.next.next;while (cur.next != null && cur.next.val == val){cur.next = cur.next.next;}} else{cur = cur.next;}}return newHead.next;}
}
双链表,有两个指针,一个快,一个慢
1. 合并两个有序链表
class Solution {public ListNode mergeTwoLists(ListNode list1, ListNode list2) {ListNode head = new ListNode();ListNode tail = head; while(list1 != null && list2 != null){if (list1.val >= list2.val) {tail.next = list2;tail = tail.next;list2 = list2.next;} else{tail.next = list1;tail = tail.next;list1 = list1.next;}}ListNode sub = list1 != null?list1 : list2;tail.next = sub;return head.next;}
}
2. 两数相加
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode p1 = l1;ListNode p2 = l2;int yushu = 0;int zhengshu = 0;ListNode tail = p1;while (p1 != null || p2 != null) {int v1 = p1 != null? p1.val:0;int v2 = p2 != null? p2.val:0;yushu = (v1 + v2 + zhengshu)%10;tail.val = yushu;zhengshu = (v1 + v2 + zhengshu)/10; if(p1 != null){p1 = p1.next;}if (p2 != null) {p2 = p2.next; }ListNode notNull = (p1 !=null)? p1 : p2;if (notNull != null) {tail.next = notNull;tail = tail.next;}}if (zhengshu != 0) {ListNode last = new ListNode();last.val = zhengshu;tail.next = last;}return l1;}
}
使用递归 + map的方式来解
1. 随机链表的复制
class Solution {Map<Node, Node> cachedNode = new HashMap<Node, Node>();public Node copyRandomList(Node head) {if (head == null) {return null;}if (!cachedNode.containsKey(head)) {Node headNew = new Node(head.val);cachedNode.put(head, headNew);headNew.next = copyRandomList(head.next);headNew.random = copyRandomList(head.random);}return cachedNode.get(head);}
}
需要使用3个指针,pre,cur,next
1. 翻转链表
class Solution {public ListNode reverseBetween(ListNode head, int left, int right) {ListNode cur = head;ListNode pre = new ListNode();pre.next = cur;for (int i = 0; i<left-1;i++) {cur = cur.next;pre = pre.next;}for (int i=0; i<right - left; i++) {ListNode next = cur.next;cur.next = next.next;next.next = pre.next;pre.next = next;}return head;}
}
LRU缓存-涉及到的数据结构很多,最好还是使用LinkedHashMap实现
public class Test {static class LRU extends LinkedHashMap<String, Object>{private int capability;public LRU(int capability){super(capability);this.capability = capability;}@Overrideprotected boolean removeEldestEntry(HashMap.Entry eldest) {return this.size() > capability;}}public static void main(String[] args) {Test t = new Test();LRU lru = new LRU(3);lru.put("2","2");lru.put("1","1");lru.put("3","3");for (Map.Entry<String, Object> entry : lru.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}System.out.println("=====1=====");lru.put("4","4");for (Map.Entry<String,Object> entry : lru.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}System.out.println("====2======");lru.remove("1");lru.put("1","1");for (Map.Entry<String,Object> entry : lru.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}System.out.println("=====3=====");lru.put("5","5");for (Map.Entry<String,Object> entry : lru.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}int[] ints = {1, 2};int[] arr = {1,2,3};int[] arr2 = new int[3];int[] arr3 = new int[]{1,2,3,4,5};}
}
数组
解法综述:
1. 使用双指针的方式来解:
a. 尾指针 + check指针
b. 快慢指针,用在股票中,如果是上升趋势就累加
2. 数组如何轮转
3. 利用数组做跳跃玩法
4. 整数转罗马数字
5. 翻转字符串中的单词
尾指针 + check指针
删除排序数组中的重复项 II
class Solution {public int removeDuplicates(int[] nums) {if (nums.length <= 2){return nums.length;}boolean flag = false;int tail = 0;int pos = 1;while (pos < nums.length) {if (nums[tail] == nums[pos] && !flag) {nums[tail + 1] = nums[pos];tail++ ;pos++;flag = true;}else if (nums[tail] == nums[pos] && flag) {pos++;}else {nums[tail + 1] = nums[pos];tail++ ;pos++;flag = false;}}return tail + 1;}
}
快慢指针,用在股票中,如果是上升趋势就累加
股票买卖的最佳时机
class Solution {//思路:马后炮,知道第二天会涨, 所以前一天会买public int maxProfit(int[] prices) {if (prices.length == 1) {return 0;}int slow = 0;int fast = 1;int total_profit = 0;while(fast < prices.length){if (prices[fast] > prices[slow]) {total_profit = total_profit + prices[fast] - prices[slow];}fast++;slow++;}return total_profit;}
}
数组如何轮转
轮转数组
class Solution {//思路很巧妙:将翻转问题转为,全局倒序,再局部正序。 public void rotate(int[] nums, int k) {int real_k = k % nums.length ;reverse(nums, 0, nums.length - 1);reverse(nums, 0, real_k - 1);reverse(nums, real_k, nums.length - 1);}public void reverse(int[] nums, int left, int right){while (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}
}
利用数组做跳跃玩法
只能跳到指定位置
class Solution {//思路://1. 确定可以跳到的最大位置,如果没有变大就是false。//2. 如果可以变大就继续跳,直到最尾部,那就是truepublic boolean canJump(int[] nums) {if (nums.length == 1) {return true;}int cur = 0;int tail = cur + nums[cur];// if (nums[cur] == 0) {// return false;// }while (cur<=tail) {int pos = nums[cur] + cur;if (pos > tail) {tail = pos;}if (tail >= nums.length - 1) {return true;}cur++;}return false;}
}
可以在一定范围内随意跳
class Solution {//思路://1. 确定可以跳到的最大位置,如果没有变大就是false。//2. 如果可以变大就继续跳,直到最尾部,那就是truepublic boolean canJump(int[] nums) {if (nums.length == 1) {return true;}int cur = 0;int tail = cur + nums[cur];// if (nums[cur] == 0) {// return false;// }while (cur<=tail) {int pos = nums[cur] + cur;if (pos > tail) {tail = pos;}if (tail >= nums.length - 1) {return true;}cur++;}return false;}
}
整数转罗马数字
class Solution {int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};String[] symbols = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};public String intToRoman(int num) {StringBuffer roman = new StringBuffer();for (int i = 0; i < values.length; ++i) {int value = values[i];String symbol = symbols[i];while (num >= value) {num -= value;roman.append(symbol);}if (num == 0) {break;}}return roman.toString();}
}
反正字符串中的单词
class Solution {public String reverseWords(String s) {s = s.trim();String[] words = s.split("\\s+");StringBuilder res = new StringBuilder();for (int i= words.length - 1; i>=0; i--) {res.append(words[i]);res.append(" ");}return res.toString().trim();}
}
相关文章:
算法题题型总结
二叉树题型 解法综述:二叉树的解法,基本上都是依赖遍历,再加上递归的思路来做的。那递归又分为深度优先和广度优先。深度优先算法,前序,中序,后序。广度优先,利用先进先出队列,一层…...
网络编程——TCP和UDP详细讲解
文章目录 TCP/UDP全面详解什么是TCP和UDP?TCP如何保证可靠性?1. 序列号(Sequence Number)2. 确认应答(ACK)3. 超时重传(Timeout Retransmission)4. 窗口控制(Sliding Win…...
Qt多线程TCP服务器实现指南
在Qt中实现多线程TCP服务器可以通过为每个客户端连接分配独立的线程来处理,以提高并发性能。以下是一个分步实现的示例: 1. 自定义工作线程类(处理客户端通信) // workerthread.h #include <QObject> #include <QTcpSo…...
【经管数据】A股上市公司资产定价效率数据(2000-2023年)
数据简介:资产定价效率是衡量市场是否能够有效、准确地反映资产内在价值的重要指标。在理想的市场条件下,资产的市场价格应该与其内在价值保持一致,即市场定价效率达到最高。然而,在实际市场中,由于信息不对称、交易摩…...
打包 Python 项目为 Windows 可执行文件:高效部署指南
Hypackpy 是一款由白月黑羽开发的 Python 项目打包工具,它与 PyInstaller 等传统工具不同,通过直接打包解释器环境和项目代码,并允许开发者修改配置文件以排除不需要的内容,从而创建方便用户一键运行的可执行程序。以下是使用 Hyp…...
【QNX+Android虚拟化方案】138 - USB 底层传输原理
【QNX+Android虚拟化方案】138 - USB 底层传输原理 1. USB 数据包的格式2. 数据传输事务过程3. 四种传输类型3.1 批量传输3.2 中断传输3.3 实时传输3.4 控制传输4. USB 设备枚举过程4.1 Attached: 发送控制传输,读取设备描述符4.2 Power -> Default 这个状态无数据传输4.3 …...
QT6 源(66)篇三:阅读与注释类 QAbstractSpinBox ,这是螺旋框的基类,附上源码
(9)所有代码来自于头文件 qabstractspinbox . h : #ifndef QABSTRACTSPINBOX_H #define QABSTRACTSPINBOX_H#include <QtWidgets/qtwidgetsglobal.h> #include <QtWidgets/qwidget.h> #include <QtGui/qvalidator.h>/* QT_CONFIG宏实…...
MCP入门
什么是mcp mcp(model context protocol,模型上下文协议) 标准化协议:让大模型用统一的方式来调用工具,是llm和工具之间的桥梁 A2A:Agent-to-Agent协议 mcp通信机制 提供mcp服务查询的平台 具有工具合集…...
FPGA中级项目8———UART-RAM-TFT
FPGA中级项目8———UART-RAM-TFT UART串口我们学过,RAM IP核学过,TFT同样也学过。那如何将它们联合起来呢? 言简意赅:实现从串口写入图像到RAM并且由TFT显示屏输出! 首先第一步,便是要将UART_RX与RAM之间…...
Ocelot\Consul\.NetCore的微服务应用案例
案例资料链接:https://download.csdn.net/download/ly1h1/90733765 1.效果 实现两个微服务ServerAPI1和ServerAPI2的负载均衡以及高可用。具体原理,看以下示意图。 2.部署条件 1、腾讯云的轻量化服务器 2、WindowServer2016 3、.NETCore7.0 4、Negut …...
数值求解Eikonal方程的方法及开源实现
Eikonal方程是一类非线性偏微分方程,形式为 ( |\nabla u(x)| f(x) ),常见于波传播、几何光学、最短路径等问题。以下是数值求解Eikonal方程的方法及开源实现参考: 一、数值求解方法 有限差分法(FDM) 快速行进法&#…...
Http详解
🧱 一、从 TCP 三次握手到访问网页:两层过程 🧩 1. TCP 三次握手(网络传输层) 这是 建立连接 的前提,跟 HTTP 无关,但 HTTP 要依赖它。 举例:你打开浏览器访问 https://example.c…...
实验五 完整性
一、引言 本次上机实验的目的主要是让学生掌握数据库完整性的三大类型(实体完整性、参照完整性、用户自定义完整性),并通过实际建库建表和数据操作加深理解。 下面将为分别展示 student、course、sc 三个表的创建语句,并设置对应的…...
《原码、反码与补码:计算机中的数字奥秘》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、原码:最直观的表示法1. 正数的原码2. 负数的原码3. 原码的特点 二、反码:原码的“反转”1. 正数的反码2. 负数的反码3. 反码的特…...
论文笔记——QWen2.5 VL
目录 引言架构创新数据整理与训练策略性能与基准测试精细感知能力应用与现实世界影响与现有模型比较结论 引言 视觉理解和自然语言处理的集成一直是人工智能研究的一个重要焦点,促成了日益复杂的视觉语言模型 (VLMs) 的发展。由阿里巴巴集团 Qwen 团队开发的 Qwe…...
前端HTML基础知识
1.HTML介绍 HTML(HyperText Markup Language,超文本标记语言)是构成网页的基本元素,是一种用于创建网页的标准化标记语言。HTML不是一种编程语言,而是一种标记语言,通过标签来描述网页的结构和内容。 超文本:超文本是…...
程序代码篇---ESP32云开发
文章目录 前言 前言 本文简单介绍了实现 ESP32-S3 传感器数据上传至云平台 手机远程控制电机 的完整方案,涵盖推荐的云平台、手机端。 一、推荐云平台及工具 云平台选择 阿里云 IoT 平台 优势:国内稳定、支持大规模设备接入、提供完整设备管理及安全…...
【C语言】文本操作函数fseek、ftell、rewind
一、fseek int fseek ( FILE * stream, long int offset, int origin ); 重新定位文件指针的位置,使其指向以origin为基准、偏移offset字节的位置。 成功返回0,失败返回非零值(通常为-1)。 origin有如下三种:分别是…...
ARM ASM
ARM ASM ARM寄存器集 列出了ARM的16个程序员可见寄存器(r0~r15)以及它的状态寄存器。 ARM共有14个通用寄存器r0~r13。寄存器r13被保留用作栈指针,r14存放子程 序返回地址,r15为程序计数器。 由于r15能够被程序员访问,…...
【五一培训】Day1
注: 1. 本次培训内容的记录将以“Topic”的方式来呈现,用于记录个人对知识点的理解。 2. 由于培训期间,作者受限于一些现实条件,本文的排版及图片等相关优化,需要过一段时间才能完成。 Topic 1:使用DeepS…...
SpringBoot使用分组校验解决同一个实体对象在不同场景下需要不同校验规则的问题
背景 添加分类的接口不需要id字段,但更新分类的接口需要id字段,当在id字段上使用NotNull注解时,会导致使用添加分类接口报id字段不能为空的错误 解决 定义分组 pojo/Category.java // 如果没有指定分组,则默认属于Default分组…...
Hibernate与MybatisPlus的混用问题(Invalid bound statement (not found))
当项目里已经有了Hibernate后: spring:jpa:hibernate:ddl-auto: updateshow-sql: trueproperties:hibernate:format_sql: true 再配置yml文件就会失效: mybatis-plus:mapper-locations: classpath:mapper/*.xml# 全局策略global-config:db-config:# 自…...
【音视频】ffplay数据结构分析
struct VideoState 播放器封装 typedef struct VideoState {SDL_Thread *read_tid; // 读线程句柄AVInputFormat *iformat; // 指向demuxerint abort_request; // 1时请求退出播放int force_refresh; // 1时需要刷新画⾯,请求⽴即刷新画⾯的意思int paused; // 1时…...
PV操作:宣帧闯江湖武林客栈版学习笔记【操作系统】
P,V,S江湖话翻译 P(申请) 江湖侠客拔剑大喊“掌柜的,给我一间上房!”(申请资源,房不够就蹲门口等)-要房令牌 V(释放) 江湖侠客退房时甩出一锭银子,大喊“…...
精品推荐-湖仓一体电商数据分析平台实践教程合集(视频教程+设计文档+完整项目代码)
精品推荐,湖仓一体电商数据分析平台实践教程合集,包含视频教程、设计文档及完整项目代码等资料,供大家学习。 1、项目背景介绍及项目架构 2、项目使用技术版本及组件搭建 3、项目数据种类与采集 4、实时业务统计指标分析一——ODS分层设计与…...
对计网考研中的信道、传输时延、传播时延的理解
对计网考研中的信道、传输时延、传播时延的理解 在学习数据链路层流量控制和可靠传输那一节的三个协议的最大信道利用率时产生的疑惑 情景: 假如A主机和B主机通过集线器连接,A和集线器是光纤连接,B和集线器也是光纤连接,A给B发…...
RAGFlow报错:ESConnection.sql got exception
环境: Ragflowv0.17.2 问题描述: RAGFlow报错:ESConnection.sql got exception _ming_cheng_tks, 浙江, operatorOR;minimum_should_match30%) 2025-04-25 15:55:06,862 INFO 244867 POST http://localhost:1200/_sql?formatjson […...
报错:函数或变量 ‘calcmie‘ 无法识别。
1、具体报错 运行网上一个开源代码,但是运行报如下错: TT_para_gen 函数或变量 calcmie 无法识别。 出错 TT_para_gen>Mie (第 46 行) [S, C, ang,~] calcmie(rad, ns, nm, lambda, nang, ... 出错 TT_para_gen (第 17 行) [~,ang,Miee,C] …...
蓝桥杯获奖后心得体会
文章目录 获奖项备考心得📖 蓝桥杯 Java 研究生组备考心得📌 一、备考规划📌 二、考试技巧📌 三、心理调整📌 四、总结 获奖项 JAVA研究生组省二 备考心得 好!我来给你写一篇蓝桥杯研究生组Java方向的备…...
大鱼吃小鱼开源
因为知道一些学校也有相关C语言课设 所以这里对代码开源(如果没有csdn会员请用夸克) 我用夸克网盘分享了「大鱼吃小鱼-程序.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速࿰…...
深度学习框架搭建(Vscode/Anaconda/CUDA/Pytroch)
目录 一 Vscode安装 二、Anaconda安装 三、更新显卡驱动 四、安装CUDA 五、安装Pytorch 六、Vscode配置 七、出现的问题汇总 一 Vscode安装 在 Windows 上安装 访问 VS Code 官网 https://code.visualstudio.com/,点击 "Downl…...
免费实用的图像处理工具箱
提到图像处理,一般会想到Photoshop。的确PS比较专业,但是学习成本比较高。其实,针对具体的应用场景,选些简单的工具软件会更方便。 今天就给大家分享一款“洋芋田图像工具箱”软件。它支持Windows和Mac电脑。 用这款软件&#x…...
范式演进:从ETL到ELT及未来展望
范式演进:从ETL到ELT及未来展望 引言 随着数据规模与实时分析需求的爆发,传统的集中式 ETL(Extract-Transform-Load)已难以为继,ELT(Extract-Load-Transform)凭借云原生仓库的弹性计算与分析工程的兴起逐步成为主流。2025 年,数据团队正加速从“先变换再加载”走向“…...
定义一个3D cube,并计算cube每个顶点的像素坐标
定义一个3D cube,并计算cube每个顶点的像素坐标 scratch a pixel课程:Your Starting Point! 3D场景中物体所有点与坐标系原点的连线,该连线与像素平面canvas的交点就是场景中3D点其投影点的位置 3D场景中的点均由这个坐标系描述 相似三角形ABC和A’B’…...
Python学习笔记(第二部分)
接续 Python.md 文件的第二部分 字典 字典的基本操作 字典是一系列 键—值 对,每一个键都与一个值关联,值可以是数字,字符串,甚至是列表或字典,可以把任何python对象都作为字典中的值 alien {color:green,points:5}键…...
ZYNQB笔记(十六):AXI DMA 环路测试
版本:Vivado2020.2(Vitis) 任务:使用 PL 端的 AXI DMA IP 核实现对 DDR3 中数据的读取与写入,实现数据环回,具体流程为: PS 端产生测试数据并写入到 DDR3 中,然后 PL 端的 AXI DMA I…...
Java学习手册:Spring 数据访问
一、Spring JDBC JdbcTemplate :Spring JDBC 提供了 JdbcTemplate 类,它简化了数据库操作,提供了丰富的 API 来执行数据库访问任务。JdbcTemplate 可以自动处理数据库连接的获取、释放,SQL 语句的执行,结果集的处理等…...
第二章 日志分析-apache日志分析(玄机系列)
简介 账号密码 root apacherizhi ssh rootIP 1、提交当天访问次数最多的IP,即黑客IP: 2、黑客使用的浏览器指纹是什么,提交指纹的md5: 3、查看包含index.php页面被访问的次数,提交次数: 4、查看黑客IP访问了…...
类比分析AI Agent 技术
引言:AI Agent 的本质与范式转变 在人工智能领域,AI Agent(智能体)代表了一种从传统软件系统到自主性实体的深刻范式转变。不同于仅仅执行预设指令或算法的程序,现代 AI Agent 被设计为能够: 感知 (Perce…...
【业务领域】PCIE协议理解
PCIE协议理解 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 PCIE学习理解。 文章目录 PCIE协议理解[TOC](文章目录) 前言零、PCIE掌握点?一、PCIE是什么?二、PCIE协议总结物理层切速 链路层事务层6.2 TLP的路…...
设计模式简述(十四)组合模式
组合模式 描述基本使用所有节点方法一致使用 叶子无实现子节点使用 添加向上查询使用(没变化) 描述 组合模式用于描述部分与整体的关系,将个体对象与组合对象的行为统一,便于维护整个数据集。 基本使用 所有节点方法一致 定义…...
【Tool】vscode
vscode问题集锦 1 全局搜索失效 ctrl shift f 快捷键失效: 原因:可能与输入法快捷键冲突,重定义输入法快捷键即可 其他 看心情和经历补充~...
文件操作--文件包含漏洞
本文主要内容 脚本 ASP、PHP、JSP、ASPX、Python、Javaweb --# 各种包含函数 检测 白盒 代码审计 黑盒 漏扫工具、公开漏洞、手工看参数值及功能点 类型 本地包含 有限制、无限制 远程包含 无限制、有限制…...
数字智慧方案6156丨智慧医联体信息化解决方案(50页PPT)(文末有下载方式)
资料解读:智慧医联体信息化解决方案 详细资料请看本解读文章的最后内容。 在医疗改革不断深化的大背景下,医联体信息化建设成为推动医疗服务高质量发展的关键力量。《智慧医联体信息化解决方案》这份资料,全面且深入地阐述了医联体信息化建…...
华为eNSP:多区域集成IS-IS
一、什么是多区域集成IS-IS? 多区域集成IS-IS是一种基于中间系统到中间系统(IS-IS)协议优化的网络架构设计,通过多区域协同、路径优化和扩展性增强实现高效路由管理,其核心特征如下: 1、分布式架构与多区…...
RAG技术完全指南(一):检索增强生成原理与LLM对比分析
RAG技术完全指南(一):检索增强生成原理与LLM对比分析 文章目录 RAG技术完全指南(一):检索增强生成原理与LLM对比分析1. RAG 简介2. 核心思想3. 工作流程3.1 数据预处理(索引构建)3.2…...
(持续更新)Ubuntu搭建LNMP(Linux + Nginx + MySQL + PHP)环境
LNMP(Linux Nginx MySQL PHP)环境是在Linux操作系统上构建的一个高性能Web服务器环境。M也可以指代其他数据库,P也可以指代Python 1. 准备Linux系统 确保你已经在一台服务器或虚拟机上安装了Linux操作系统。推荐使用Ubuntu、CentOS或Debi…...
机器人手臂控制器:EMC电磁兼容解决(一)
一、机器人手臂控制器行业标准剖析 GB/T 39004—2020《工业机器人电磁兼容设计规范》 GB/T 37283-2019 服务机器人 电磁兼容 通用标准 抗扰度要求和限值 GB/T 39785-2021 服务机器人 机械安全评估与测试方法 GB/T 40014-2021 双臂工业机器人 性能及其试验方法 GB/T 40013-…...
Qt进阶开发:QSS常用的语法介绍和使用
文章目录 一、什么是QSS?二、QSS的基本语法三、QSS 的使用方式3.1 在代码中设置 QSS3.2 加载外部 QSS 文件四、QSS中选择器的介绍和使用4.1 Type Selector(类型选择器)4.2 ID Selector(ID 选择器)4.2.1 仅使用 ID(常见写法)4.2. 2 类型 + ID(更精确匹配)4.3 Class Sel…...
qemu学习笔记:QOM
2.4 QOM介绍 说明:小白学习qemu的一些学习笔记。主要是学习《QEMU&KVM源码解析与应用》这本书。 参考: 《QEMU&KVM源码解析与应用》作者:李强 Qemu - 百问网嵌入式Linux wiki QOM 定义:QEMU Object Model,是 Q…...