自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于建立时间与保持时间的本质

建立时间与保持时间的概念?建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间。建立时间裕量与保持时间裕量建立时间裕量:如果数据信号在时钟边沿触发之前的持续时间要大于建立时间Tsu,那么超出的部分时间即为建立时间裕量。保持时间裕量:如果数据信号在时钟边沿触发之后的保持时间要大于保持时间Thd,那么超出的部分时间即为保持时间裕量。为什么触发器要满足建立时间和保持时间? 因为触发器内部

2022-04-10 18:32:51 1506

原创 Verilog设计之异步fifo设计

module test_fifo #( parameter addr_width=4, parameter data_width=8, parameter fifo_depth=1<<(addr_width-1),) ( input clka, input clkb, input rstn, input w_en, input r_en, input [data_width-1:0]w_data, out

2022-03-15 11:48:29 1277 2

原创 verilog常考面试题之同步FIFO设计(给定位宽和深度)

fifo(first in first out)fifo的作用是缓冲,分为同步fifo和异步fifo,跟其他存储单元例如RAM的区别最大在于RAM有地址线,可寻址读写,而FIFO不可寻址,所以读写地址得用读写指针生成。1.同步fifo的写时钟和读时钟是同一个时钟域(信号基于同一个时钟变化)2.同步fifo的三部分:fifo写控制逻辑:产生写地址(决定往哪写,从0开始写)、写有效信号、写满(决定是否还能写)等信号;fifo读控制逻辑:产生读地址(决定从哪读,从0开始读)、读有效信号、读满(决定是否还.

2022-03-04 16:22:10 2351

原创 IC面试常考题 Verilog三分频电路设计(占空比50%,三分之一,三分之二)

实现三分频电路最简单的是:利用计数器实现。时序图分析(本人比较懒,平常科研忙,所以直接手画时序图了,懒得用软件画了):直接上图分析:利用计数器每隔三个周期信号翻转一次,同时在不同的计数下翻转得到的同步信号clk_1和clk_2,再利用异或即可实现出一个不同占空比的三分频信号(同样的方法也可扩展到其他奇数分频设计中)。 例如占空比50%:module Div_three( input clk, input rst_n, output div_three);reg

2022-03-02 21:57:42 10837 5

原创 SV中父类与子类句柄转换,即子类的扩展类与父类句柄转换等问题

如上图,表示了父类与子类的继承关系以及对象关系。因此假设B继承A,那么子类B所能访问的成员变量同时包括自己的成员和父类的所有成员变量,也就是图中的大三角;而父类A仅能访问自己以及子类中属于自己的成员变量,不可访问子类的成员变量,即图中的小三角这是编译器规定,同时这个业与C/C++等高级语言保持一致。那么就有一个问题,实际写代码过程中,避免不了类型的转换问题,父类和子类句柄之间该如何转换?根据图中的包含与被包含关系,我们可以清楚看到,子类包含了父类,因此:父类句柄=子类句柄,顺理成章,但反过来就不行.

2022-01-11 22:39:00 3835 3

原创 springboot+vue项目部署到linux_arm64系统

1.前端打包,rpm run build生成dist文件夹下的文件放到后端static文件夹下(至于前后端配置可以参考我另外一篇文章)2.修改数据库链接密码(服务器短的数据库链接密码)3.将项目打包成jar文件(如果出现失败记得去改pom文件)pom文件配置 <build> <plugins> <plugin> <groupId>org.springframework.boo

2021-08-31 22:20:02 1028 1

原创 run build打包之后axios能连上,websocket连不上问题已解决

网上很多人说vue.config文件下换成绝对路径,我觉得然并卵前端url配置:生产环境的url为服务端的ip后端配置:前端websocket配置:可以改成生产环境对应的api前端build之后将dist文件夹下的文件复制粘贴放入后端static文件夹下,然后后端进行封装,注意这个时候封装成的html我理解的是是静态文件,而大多数时候我们使用websocket传输数据是一种动态建立传输:我打开后可以试用axios连接后端,静态数据也可以展示但是websocket所传输的动态数据一直没有出来

2021-08-31 22:11:33 1562 1

原创 航班预订统计(差分数组)

解题思路:差分数组对应的概念是前缀和数组,对于数组 [1,2,2,4][1,2,2,4],其差分数组为 [1,1,0,2][1,1,0,2],差分数组的第 ii 个数即为原数组的第 i-1i−1 个元素和第 ii 个元素的差值,也就是说我们对差分数组求前缀和即可得到原数组。ans数组刚开始记录的是每个数和他前一个数的差值即表示为差分数组,那么我们可以举例[1,2,10],ans[0]=10,ans[1]=0,ans[2]=-10,表示的就是此时idx=1跟他前一个数idx=0相差为0,即num[0]=.

2021-08-31 20:39:34 123 1

原创 监控二叉树(基于二叉树的动态规划)(后序遍历的进阶)

解题思路:这道题目其实不是那么好理解的,题目举的示例不是很典型,会误以为摄像头必须要放在中间,其实放哪里都可以只要覆盖了就行。这道题目难在两点:需要确定遍历方式需要状态转移的方程我们之前做动态规划的时候,只要最难的地方在于确定状态转移方程,至于遍历方式无非就是在数组或者二维数组上。本题并不是动态规划,其本质是贪心,但我们要确定状态转移方式,而且要在树上进行推导,所以难度就上来了,一些同学知道这道题目难,但其实说不上难点究竟在哪。需要确定遍历方式首先先确定遍历方式,才能确定转移方程,那么该如.

2021-08-20 18:19:06 290 1

原创 最小好进制(二分查找)

class Solution { public String smallestGoodBase(String n) { long num=Long.parseLong(n); int dmax=(int)(Math.log(num)/Math.log(2))+1; for(int i=dmax;i>=2;i--){ long kmin=2,kmax=(long)Math.pow(num,1.0/(i-1))+1; while..

2021-08-15 22:40:41 121 1

原创 出界的路径数(记忆化bfs)

记忆化dfs 已遍历过的点他的方案数已知晓 所以无需重新遍历class Solution { int MOD = (int)1e9 + 7; int[][][] dp; int m1,n1,maxstep=0; public int findPaths(int m, int n, int maxMove, int startRow, int startColumn) { m1=m;n1=n;maxstep=maxMove; dp=new i.

2021-08-15 15:36:48 137 1

原创 重塑矩阵(matlab reshape函数原理)

简单来说就是同样容量的情况下才能转换,否则就输出原矩阵(i,j)对应了矩阵中第i*n+j个数,对应ans中idx/c,idx%cclass Solution { public int[][] matrixReshape(int[][] mat, int r, int c) { int m=mat.length,n=mat[0].length; if(m*n!=r*c)return mat; int [][]ans=new int[r][c]; for(int .

2021-08-13 12:08:30 1255 1

原创 跳跃游戏Ⅳ(bfs+动态规划)

解题思路:题目要求计算从第一个元素跳到最后一个元素最少的操作次数。首先容易想到的是,坐标位于最后一个元素时,结果应为0,因为不用任何操作;对于这个元素紧挨着的左右元素(此时只存在左边的元素),它的操作数是1,因为只需要跳一次就跳到了最后;同理,对于数组里值和最后一个元素相等的那些数,他们的操作数都是1。然后,对于倒数第二个元素,它的操作数前一步已经求得为1,它右边数的结果也已经知道了,是0;它左边的数如果不等于最后一个数,那么它跟最后一个数的距离应为2。这里距离的意思是指操作次数,即跳两次才能到达最后.

2021-08-12 18:42:14 243 1

原创 等差数列划分(双指针or差分)

滑动窗口优化:双指针O(N),i-idx-1之间是一个等差数列,那么求它的等差子数组即可,最小的等差子数组长度为3,数量为len-3+1,最长的等差子数组长度为len,数量为1,那么他子数组的数量也是一个等差为1的等差数列,套用等差数列求和公式,最后i不必从最开始查起,直接跳转到idx-2处 以idx-2为首查等差数列长度即可class Solution { public int numberOfArithmeticSlices(int[] nums) { if(nums.length.

2021-08-10 11:21:43 165 1

原创 超级丑数(巧用记忆数组)

本质上就是将超级丑数ans[]不断跟prime[]中元素相乘得到最新的丑数,那么会出现一个问题:1.如何保证每次放进ans的丑数都是按照次序放进去的?2.如何保证每次放进ans的丑数不是重复值?灵感来源于B站:链接: 超级丑数.解题思路:查找最小丑数可以边历数组,但是不能去重,那么我们通过观察可以考虑到prime[i]跟ans[j]乘过之后就不能回头在用prime[i]*ans[j]了,也就是prime[i]每次在使用完后只用下次乘ans[++j]了,也就是prime[i]最多跟ans[j]乘.

2021-08-09 23:34:32 149 1

原创 访问所有节点的最短路径

关键点就是二进制位来记录某一位结点是否访问 关键就是state[][]数组的设置,然后用队列维护状态class Solution { public int shortestPathLength(int[][] graph) { int n=graph.length; boolean [][]state=new boolean[n][1<<n];//表示访问到当前i结点时,总共访问了多少个结点,二进制i位为1表示i结点已经被访问了 Queue<int[.

2021-08-07 23:10:43 442 1

原创 判断环形数组是否存在循环

这道题解读:首先是 给定的数组一定有环,但是这个环不能是自环且必须是「同向」才合法,因此如果我们在遍历过程中发现存在反向,就停止检查,并且把存在反向环的节点都标记为0,如此以后在遇到这些点就可以直接跳过,因为题目给定的每个点都只有一个唯一的出路,所以不用担心会判断错误具体地,我们检查每一个节点,令快慢指针从当前点出发,快指针每次移动两步,慢指针每次移动一步,期间每移动一次,我们都需要检查当前单向边的方向是否与初始方向是否一致,如果不一致,我们即可停止遍历,因为当前路径必然不满足条件。如果在一个符合题意.

2021-08-07 19:08:04 302 1

原创 蓄水池算法(链表随机节点)

/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * ..

2021-08-07 00:00:56 130 2

原创 有效三角形的个数(双指针或二分法)(和三数之和一模一样的思路)

力扣链接:链接: 力扣.class Solution { public int triangleNumber(int[] nums) { int ans=0; Arrays.sort(nums); for(int i=nums.length-1;i>=2;i--){ int x3=nums[i]; int j=i-1,k=0; while(k<j){ if(nums[k]+nums[j.

2021-08-04 22:17:59 141 1

原创 拓扑排序(解决具有依赖性关系的问题)

拓扑排序是对一个有向图的顶点进行排序。它关心的是图中各个顶点的连接关系,这种连接关系也叫拓扑关系,因为它不关心各个顶点的位置与距离。应用:在一个有向无回路图中,要求对所有的节点进行排序。先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点关联的节点的入度减一。一直做改操作,直到所有的节点都被分离出来。如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。下面是演示过程。举例:力扣113 课程顺序解题思路:由题目给出一个有向无回路图

2021-08-04 18:43:37 1504 2

原创 最短路算法(网络延迟时间)

Dijkstra算法功能:给出加权连通图中一个顶点,称之为起点,找出起点到其它所有顶点之间的最短距离。将所有节点分成两类:已确定从起点到当前点的最短路长度的节点,以及未确定从起点到当前点的最短路长度的节点(下面简称「未确定节点」和「已确定节点」)。每次从「未确定节点」中取一个与起点距离最短的点,将它归类为「已确定节点」,并用它「更新」从起点到其他所有「未确定节点」的距离。直到所有点都被归类为「已确定节点」。用节点 AA「更新」节点 BB 的意思是,用起点到节点 AA 的最短路长度加上从节点 AA.

2021-08-03 22:24:24 475 1

原创 二叉树的垂序遍历(基于前序遍历的升华)

核心思路:自定义排序每个节点有三个属性:值val,行坐标row,列坐标col1、先按列排序,从小到大;2、列相同,再按行排序,从小到大;3、行相同,按值的大小排序,从小到大。所以我们有两种实现思路:用双哈希表或者结构体自定义排序双哈希表:一个表存储列,一个表存储行,用数组每次记录数据,然后对数组进行自定义排序/** * Definition for a binary tree node. * public class TreeNode { * int val; * .

2021-07-31 12:16:20 257 2

原创 最长递增子序列&&得到子序列的最少次数

基础:求一个序列的最长递增子序列二分+贪心:最长子序列的长度一定小于等于数组的长度,那么使用二分法,在遍历数组过程中,找到合适位置插入当前数据,如果当前查找位置比nums[i]小那么nums[i]应该放在当前位置的右侧,反之当前位置>=nums[i],那么右侧的范围应该缩小,使得当前较大位置数据替换成nums[i],如此我们可以得到最长递增子序列class Solution { public int lengthOfLIS(int[] nums) { int []mm=new

2021-07-26 22:38:55 315 1

原创 从相邻元素对还原数组

题意理解:就是把原来的数据按照相邻一对儿一对儿的分割成一个二维数组,然后打算顺序,让你还原解题思路:我们可以试用哈希表记录每个元素的相邻元素,当遍历完二维数组后,通过识别相邻元素个数即可得出首尾元素,首尾元素的相邻元素个数都为1,那么题中说多种顺序下,返回任意一个顺序即可,即我们确定一个首元素后,接下来就可以通过利用哈希表记录的相邻元素去依次往右添加元素注意每个数的相邻元素最多只有两个,那么当记录的第一个相邻元素不等于某个元素的左侧元素时,它就是这个元素的右侧元素,当等于左侧元素的时候,那么右侧元.

2021-07-25 13:11:12 106 1

原创 检查是否区域内所有整数都被覆盖(遍历一次,区间相消即可)

根据题意,就是要在ranges中找到能包含left和right的所有区间那依次遍历ranges所有区间,当[[start],[end]]跟[[left],[right]]没有重复区间时直接跳过当[[left],[right]]完全包含了[[start],[end]],把start,end区间消去然后判断left,start-1&&end+1,right当[[start],[end]]包含[[left],[right]]的部分区间分为两种情况:一种是包含了[[left],[right.

2021-07-23 16:17:22 298 1

原创 绝对差值和

class Solution { final int mod = 1000000007; public int minAbsoluteSumDiff(int[] nums1, int[] nums2) { int []rec=new int[nums1.length]; System.arraycopy(nums1,0,rec,0,nums1.length); Arrays.sort(rec); int maxn=0,sum=0; for.

2021-07-15 00:09:06 633 1

原创 java char[]转string 使用new String(char[])不能使用toSting()

如题

2021-07-13 23:44:51 292

原创 扫描线算法(天际线问题)

扫描线的核心在于 将不规则的形状按照水平或者垂直的方式,划分成若干个规则的矩形。class Solution { public List<List<Integer>> getSkyline(int[][] buildings) { List<List<Integer>> ans=new ArrayList<>(); List<int []>bu=new ArrayList<int []>();.

2021-07-13 23:28:08 351 1

原创 h指数:求数组中满足有h个数>=h,n-h个数<=h的最大h

排序遍历:结果必然是0<=h<=n其实两个条件等于一个条件,随意设一个数组,排序后,假设某一位数他是数组中第h个数,且这个h满足我们想要的结果,那么如果它和后面有h个数大于等于h,前面的数必然小于他本身,且前面有n-h个数,所以融合两个条件为一个,h从0开始递增,我们从数组最后一位最大的数向前遍历,h表示当前数(不含自身)后面有h个数>=h,如果num[i]>h,则我们发现h+1也是满足结果的,则h++替换h,同时继续向前判断,直到h不能递增为止class Solution {.

2021-07-11 12:07:11 407 1

原创 Arrays.sort在char数组自定义排序出现意外

今天在写代码时,遇到了一个意外,对char数组自定义排序过程中,报错,按照Arrays.sort()写法我应该没写错class Solution { public String frequencySort(String s) { HashMap<Character,Integer> map=new HashMap<>(); for(int i=0;i<s.length();i++){ map.put(s.charAt(i),map.getOrDef

2021-07-03 11:49:10 880 2

原创 并查集解决图论问题(连通性及有无圈存在)

题目中确定给的是连通图,那么根据图论知识树的等价条件为m=n-1,所以很明显数组中只有一条边是答案,同时只要找出来图中的一个圈就能得到答案,树是无圈连通图,那么可以用并查集思想解题回想图论找出最小生成树 有避圈法和破圈法,本题用避圈法思想遍历数组,对于每一条边的两个点 ,在这条边之前构造的图中,如果两点已连通,加上这条边就有圈,就必然不是树,所以这条边就是答案如果两点不连通,加上这条边则为树,继续下去找最大树class Solution { public int[] findRedunda.

2021-07-01 22:35:14 419 1

原创 串联字符串的最大长度(位运算)

class Solution { public int maxLength(List<String> arr) { List<Integer> res=new ArrayList<>(); res.add(0); int ans=0; for(int i=0;i<arr.size();i++){ String s=arr.get(i); int cur=0; for...

2021-06-19 13:29:00 98 1

原创 四平和定理解决一个数的完全平方数组成个数

example:求组成一个数的完全平方数的最小个数class Solution { public int numSquares(int n) { if (isPerfectSquare(n)) { return 1; } if (checkAnswer4(n)) { return 4; } for (int i = 1; i * i <= n; i++) {

2021-06-14 15:02:51 110 1

原创 背包DP(数位成本和为目标值的最大数字+完全平方数+零钱兑换+盈利计划+最后一块石头的重量+目标和+1和0)

example 1:class Solution { public String largestNumber(int[] cost, int target) { int [][]dp=new int[10][target+1]; for(int i=0;i<=target;i++){ dp[0][i]=Integer.MIN_VALUE; } int [][]form=new int[10][target+1]; dp

2021-06-14 14:46:28 671 1

原创 前缀和大集合(子数组=target问题,子矩阵=target问题)

含有相同数量的0和1,就意味着这样的子数组长度是这个区间和的二倍,那么可以推导出这样一个公式:sum[cur]-sum[pre]=2(cur-pre) =>sum[pre]-2pre=sum[cur]-2cur; sum[i]表示前i个元素和同时cur-pre>=2;所以判断的时候从i=2开始判断, 用哈希表存放所有元素的sum[pre]-2pre和对应子数组长度,第一个应该是(0,0),后续只要判断是否存在2*sum[i]-i,如果存在就结果=当前长度-map.get(k)c.

2021-06-07 12:29:27 152 2

原创 SpringBoot项目出现Whitelabel Error Page

打开http://localhost:8080/出现这样局面 网上很多人都说controller位置不对,可是明明按照教程做的,很多人都不知道怎么回事?其实是因为网上的教学视频都比较老,现在springboot版本越来越新,老版本的已经不适用,出现这样的情况需要我们在templates里加上index.html文件重新启动项目即可成功文件内容<!DOCTYPE html><html lang="en"><head> <meta charset.

2021-06-07 09:15:09 317 1

原创 巧用图论知识解数组汉明距离总和

其实就是图论里边的偶图,例如:当只有所有数都是0或1的时候,0和1看成两个分支 0为X分支 1为Y分支 求边数,0和1连边才有汉明距离,同一分支不能互连 按位运算把所有nums[i]某一位的0和1看成两个分支 0为X分支 1为Y分支 求边数,0和1连边才有汉明距离,同一分支不能互连class Solution { public int totalHammingDistance(int[] nums) { int res=0; int []digit=new .

2021-05-28 09:58:39 130 1

原创 反转每对括号间的子串

思路:遇到括号内问题就首先想到利用栈去解决从最内层开始,一层一层反转,那么之前遍历的字符串依次存入栈中,没反转内层依次,将前一次读取的字符串添加上,反转时刻就是当遇到‘)’的时候,而放入栈中的时刻就是遇到‘(’的时候。class Solution { public String reverseParentheses(String s) { Stack<String> stk=new Stack<>(); StringBuffer res=new St.

2021-05-26 11:11:34 172 1

原创 使所有区间的异或结果为零需要修改的元素的最少数(DP)

class Solution { public int minChanges(int[] nums, int k) { int maxn=1024; int [][]dp=new int[k][maxn]; int []g=new int[k]; for(int i=0;i<k;i++){ Arrays.fill(dp[i],0x3f3f3f); //g[i]=0x3f3f3f; } for...

2021-05-25 13:26:45 139 1

原创 利用归并法求数组中的逆序对

关键在于合并的过程中怎么求解逆序对的数量,合并过程中需要将乱序的[left,mid]和[mid+1,right]元素排好序,此时[left,mid]和[mid+1,right]均排好序的情况下,那么如果num[idx1]>num[idx2]代表[idx1,mid]之间的所有元素都>num[idx2],跟num[idx2]组合都是逆序对,此时求解出来的逆序对数量是 mid-idx1+1而因为[left,mid]和[mid+1,right]还并未合并,所以前后两组元素顺序并未改变,这样算法..

2021-05-24 16:26:53 713 3

空空如也

空空如也

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

TA关注的人

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