![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
校园时光
收录本人校园时期所留下博文
Destory(this)
这个作者很懒,什么都没留下…
展开
-
20.8.7 queue memset Floyd
1.queuequeue<int> q;//返回队首q.front();//返回队尾q.back();//入队、出队q.push(1);q.pop();//队列长度、判空q.empty();q.size();2.memsetvoid* memset( void* dest, int ch, std::size_t count );Converts the value ch to unsigned char and copies it into each of the原创 2020-08-07 19:20:05 · 83 阅读 · 0 评论 -
20.8.1 vector unordered_map bitset
1.vector//初始化vector<int> v={1,2,3};//在末尾插入v.push_back(4);2.unordered_map//初始化unordered_map<int,int> um;//插入值um.insert({1,2});//查找是否有keyif(um.find(1)!=um.end()) cout << "Found" << '\n';if(um.count(1)>0) cout <原创 2020-08-03 17:28:06 · 103 阅读 · 0 评论 -
20.8.8 Trie(前缀树) 环形链表环的起点
1.Trie(不是二叉树)Trie 树是一个有根的树,其结点具有以下字段:最多 RR 个指向子结点的链接,其中每个链接对应字母表数据集中的一个字母。布尔字段,以指定节点是对应键的结尾还是只是键前缀。其他人写的正常版本class Trie {private: Trie* child[26]; bool isword;public: /** Initialize your data structure here. */ Trie() { iswo原创 2020-08-09 08:36:21 · 129 阅读 · 0 评论 -
20.8.25 Rabin-Karp编码(字符串-哈希)
1.Rabin-Karp编码问题出现在491.递增子序列中求出所有递增子序列不难,问题是如何去除重复的项一开始使用的是unique,但是效果很不好sort(ans.begin(),ans.end());ans.erase(unique(ans.begin(), ans.end()), ans.end());官方题解中给出Rabin-Karp编码的方法,即计算字符串的hash值,在哈希表中判重字符串中字符的种类有k个,则把字符串看成是k+1进制数(如s=“abcab”,有abc三种字符,则原创 2020-08-25 10:55:21 · 647 阅读 · 5 评论 -
20.8.19 求最长回文子串(动态规划、中心扩散)求回文子串的个数 to_string
1.求最长回文子串使用动态规划状态:如果s[i+1]…s[j-1]是回文串,而且s[i]=s[j],那么s[i]…s[j]也是回文串所以状态转移数组dp[i] [j]表示s[i…j]是否是一个回文串class Solution {public: string longestPalindrome(string s) { if(s.size()<=1) return s; bool dp[s.size()][s.size()];//dp数组原创 2020-08-19 20:48:04 · 122 阅读 · 0 评论 -
20.8.11 分组异或
1.分组异或原题原题解设这两个数字分别是a和b,由于相同的数字进行异或运算结果为0,则nums数组中所有数字进行异或运算的最终结果=a^b,记这个结果为sum分组异或:a和b至少有1bit不相同(在sum的值为1的位上)两个相同的数,在任一bit都是相同的取mask=1<<n,使a & mask ≠ b & mask举例:sum=011,a和b在d1和d0位不相等,则mask=010/001,使a & mask ≠ b & mask特例:mask原创 2020-08-11 20:10:37 · 501 阅读 · 0 评论 -
20.8.4 拓扑排序 new 字符数组转字符串 stack
1.拓扑排序拓扑排序中,每次取的结点为没有入度的点(没有前驱)//判断是否存在拓扑排序;prerequisites为边;[1,0]代表1必须在0前面完成 bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { vector<vector<int>> edge(numCourses); int indegree[numCourses];原创 2020-08-04 16:42:17 · 129 阅读 · 0 评论 -
20.8.29 回文串的判定(Rabin-Karp、KMP)
1.回文串的判定将字符串转置,如果转置后与原串相等,则这是一个回文串原题214.最短回文串该题需要求出“最长回文前缀”,再把最长回文前缀之后的每个字符转置后加到原串的前面即可如abbaaddd,最长回文前缀abba,将addd转置成ddda,添加到原串的前面得到dddaabbaaddd1.1Rabin-Karp详见之前的博客20.8.25 Rabin-Karp编码每次计算的是字符串s[0…i]以及它的转置的Rabin-Karp编码,可以根据s[0…i-1]的值来直接计算分别用left和ri原创 2020-08-29 16:20:37 · 285 阅读 · 0 评论 -
20.8.18 二叉搜索树(BST)
1.二叉搜索树二叉搜索树的中序遍历是一个升序序列(左子树结点的值比根结点的值都小,右子树的值比根结点的值都大)将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1所以:根结点是有序数组正中间的一个数,使用递归分别求出左子树和右子树class Solution {public: TreeNode* sortedArrayToBST(vector<int>& nums) {原创 2020-08-18 21:26:09 · 76 阅读 · 0 评论 -
20.8.3 reverse 基于范围的for循环
1.reverse反转范围内的元素int a[5]={1,2,3,4,5};//反转所有五个元素reverse(begin(a),end(a));//或者reverse(&a[0],&a[5]);//end指向的是最后一个元素的下一个2.基于范围的for循环int temp[100]={0};//case 1for(auto &x : temp){}//case 2for(int y : temp){}...原创 2020-08-03 19:03:23 · 361 阅读 · 0 评论 -
8.28 LCA问题-BinaryLifting
1.LCALCA(Lowest Common Ancestor)问题,即求树的两个结点的最近公共祖先首先,我们解决如何查找到树结点的第K个祖先的问题,再使用接下来的算法即可伪代码:int LCA(int u,int v){ if u 是 v 的祖先 return u if v 是 u 的祖先 return v for(k:1~u的深度) t = u 的第k个祖先 if t 是 v 的祖先 return t return 0;//直到根节点了还不是 u 、 v 的公共祖先,根据题目处理原创 2020-08-28 22:08:53 · 256 阅读 · 0 评论 -
20.8.6 sort pair 求最长递增子序列
1.sortstd::sort//sort(first,last,compare);vector<int> s={1,3,5,2,4,6};//compare可以是默认(不写)、库函数、用户函数、lambda表达式sort(s.begin(),s.end(),greadter<int>());//递减sort(s.begin().s.end(),[](int a,int b){return a<b;});//递增2.pairstd::pairpair<原创 2020-08-06 12:39:12 · 189 阅读 · 0 评论 -
20.9.4 二叉树的Morris遍历
1.二叉树的Morris遍历(莫里斯)使用递归和栈遍历二叉树,空间复杂度都是O(n),而Morris遍历通过使用叶子结点的null指针标记前驱结点,使空间复杂度降为了O(1)。中序遍历:左子树-根节点-右子树所以对于根节点,它的前驱结点是左子树的最后一个结点(即左子树的最右结点) 记当前的结点为cur 若cur有左子树,则pre=cur的左子树的最右结点 若pre的右孩子为空,则将它的右孩子指向cur,并进入cur的左孩子 若pre的右孩子是cur(上次访问时,上一种情况下设置的),则访问原创 2020-09-04 16:15:11 · 71 阅读 · 0 评论 -
20.8.5 动态规划 归并排序(链表排序、bottom to up 法)
1.动态规划(DP)动态规划解题分为4步:1.划分子问题2.求子问题的递推关系(递推式、边界)3.求解子问题(使用DP数组)4.空间优化入门题题解:子问题:打劫前k个房子时,对于第k个房子,最高金额为max(打劫前k-2个房子的最高金额+打劫第k个房子的金额,打劫前k-1个房子并放弃第k个房子的金额)class Solution {public: int rob(vector<int>& nums) { int pre2=0;原创 2020-08-05 20:27:37 · 774 阅读 · 0 评论 -
20.8.10 dfs+回溯
1.深搜回溯深搜:对每一个单位枚举它的每一种可能回溯:当前决策无解时返回上一次决策的状态原题最基本的枚举:每根火柴分别放在四个边,N根火柴共枚举4^N次,很可能超时优化 if(nums.size()<4) return false;//只有0-3根火柴,不可能拼成正方形 int sum=0; for(auto x:nums) { sum+=x; t.push_back(0);原创 2020-08-10 16:47:59 · 80 阅读 · 0 评论 -
20.8.2 二叉树遍历 二叉树展开为链表
1.二叉树遍历先序:父、左、右中序:左、父、右后序:左、右、父常用思路是递归转迭代(倒序压栈)算法来自1.压入根节点2.取出栈顶结点3.按照遍历顺序倒序压入三个节点(父、左、右)4.压入根节点时额外压入一个空节点5.读到空节点时取出该节点并删除6.直到栈空先(根-左-右): vector<int> preorderTraversal(TreeNode* root) { vector<int> res; stack<原创 2020-08-03 17:27:45 · 128 阅读 · 0 评论 -
【人工智能实验】A*算法解决八数码问题 C#
题目在3X3的棋盘上放置1到8八个数码,每个数码占一格,且有一个空格。这些数码可以在棋盘上移动,移动规则是:与空格相邻的数码可移入空格。给出初始棋局和目标棋局,用A*算法,给出数码移动序列。目标状态: 1 2 3 8 4 7 6 5算法while(open不空){ sort open,升序 n=open中最小的节点 if(n是目标节点) { 输出结果 break while }end if for(n的每个子节点) { n在open中,且n比该节点小:原创 2020-11-19 09:45:13 · 1655 阅读 · 0 评论 -
【人机交互实验】命令行数独游戏 C#
题目a) 设计一个命令行界面的游戏,登入游戏界面后,应该有游戏规则说明,按键说明。b) 进入游戏前应该有难度选择:1表示简单、2表示中等、3表示困难。c) 在游戏主界面中有可以循环输入数独值、可以连续玩好几局直到退出、检查结果、查看答案、新开一局的功能。d) 信息提示功能:输入错误时应有提示、游戏失败或获取胜利时应有庆祝界面等。展示源码using System; using System.Collections.Generic; using System.Linq; using原创 2020-11-19 09:52:11 · 1874 阅读 · 0 评论 -
【人工智能实验】遗传算法解决旅行商问题 C#
问题设有n个互相可直达的城市,某推销商准备从其中的A城出发,周游各城市一遍,最后回到A城。要求为该推销商规划一条最短的旅行路线。算法源码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace TSP{ class P { int len; public原创 2020-11-19 09:48:28 · 734 阅读 · 0 评论 -
软件质量与测试 期末复习
1.软件测试概述W模型 需求分析-系统测试;概要设计-集成测试;详细设计-单元测试(准备);编码-单元测试;集成-集成测试;实施-系统测试;交付-验收测试(实际测试)测试描述角度 需求-界面-功能-安全性-可靠性-可移植性-兼容性-易用性-疲劳-压力测试2.软件测试技术2.1白盒测试逻辑覆盖 语句-判定-条件-判定条件-条件组合 测试用例基本路径 给程序,画出控制流图-环路复杂度-独立路径-测试用例2.2黑盒测试等价类划分:有效-合并等价类 无效-每种一个测试用例边界值分析-重点因果分析原创 2020-08-16 19:58:47 · 817 阅读 · 0 评论 -
面试复习-算法
算法排序冒泡(双重循环)外层是趟数,内层是比较的位置,然后两两交换选择排序(双重循环)外层是趟数,内层找到当前趟数的最大值放到最后面插入排序 一个数插入有序数组,从第一个数开始比较快速排序 每趟找一个数,比它小的放前面,比它大的放后面,不断减小范围归并排序 将两个有序数组合并成一个有序数组堆排序 建立一个堆的过程希尔排序 数组分隔成n组,然后插入排序桶排序哈夫曼树定义:带权路径长度最小的数每次取权值最小的两个结点生成树,新的父节点为两结点之和A*算法寻路时维护open原创 2020-09-30 14:53:38 · 89 阅读 · 0 评论 -
面试复习-图形学2
图形学变换:齐次坐标系,为什么用;仿射变换:线性变换(缩放,对称,旋转,切变)、平移正交投影和透视投影MVP变换:模型坐标系-世界坐标系-观察者坐标系-裁剪空间;视口变换:屏幕空间光栅化 为什么要用三角形(平面、判断内外、重心坐标)?为什么会产生锯齿反走样:MSAA(在像素周围插值)、FXAA(直接替换掉锯齿)、TAA(复用上一帧的值,对静态物体)、DLSS(拉大分辨率+深度学习)深度测试:画家算法-不能处理互相遮挡;Z-buffer算法-不能处理透明物体着色:局部,与其它物体无关,不考虑原创 2020-09-30 14:56:59 · 287 阅读 · 0 评论 -
面试复习-C++
C++ 11 新特性语法糖部分nullptr:代替NULL;原因:NULL和0有时会分不清,用nullptr专门区分空指针和0auto和decltype:自动类型推导 ;auto可以推导变量的类型,与C语言中原有的auto功能不相同;auto声明的变量必须初始化;auto不能声明为返回值、不能作形参、不能被修饰为模板参数;auto对运行效率没有影响,因为变量类型的推导在编译时本来也要进行;decltype可以分析表达式的类型,但是不计算表达式的值,是对auto只能判断变量类型的补充for原创 2020-09-30 14:53:02 · 122 阅读 · 0 评论 -
网络原理 期末复习
1.概述电路交换-两个用户始终占用端到端通信资源分组交换-报文分成小的数据段,在各个路由器之间相互转发速率-吞吐量-带宽-时延2.物理层奈氏准则:信道中码元传输的速率有上限香农定理:信道极限速率C=W带宽log2(1+S/N信噪比)复用:频分、时分、波分、码分、正交频分复用码分复用:每个站有自己的m bit的码片,发送1-发送m,发送0-发送m的反码;每个站的码片不相同且正交;规格化内积,发送1为1,发送0为-13.数据链路层点对点协议PPP:封装成帧(帧定界);透明传输(字节填充:使原创 2020-08-17 21:25:50 · 170 阅读 · 0 评论 -
软件体系结构 期末复习提纲
1.软件体系结构概论1.1软件危机表现: 软件成本日益增长。开发进度难以控制。软件质量差。软件维护困难原因: 用户需求不明确。缺乏正确的理论指导。软件规模越来越大。软件复杂度越来越高克服: 软件工程三要素:方法 工具 过程1.2构件定义:构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通讯接口和实现代码的复合体获取:现有直接用;旧工程中提取;购买;自己开发分类:关键字、刻面、超文本组织重用:检索与提取-理解与评价-修改-组装1原创 2020-08-16 19:57:39 · 1297 阅读 · 0 评论 -
面试复习-计算机图形学
计算机图形学线代基础向量加法、投影向量点乘、叉乘矩阵乘法变换线性变换:缩放、对称、切变,旋转齐次坐标(为了平移变换)仿射变换:线性变换+平移复合变换从右向左应用(矩阵乘法的结合律)投影MVP正交投影 Mortho透视投影 MorthoMpersp->ortho光栅化三角形的优势(在一个平面、内外可由叉乘判断、三角形内部插值)采样(把函数离散化)在像素的中心判断,在不在三角形内(叉乘,分别在三条边的左/右侧)锯齿、摩尔纹、车轮效应:采样的频率和函数的频率相差原创 2020-09-30 14:54:06 · 1652 阅读 · 5 评论