自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络压缩算法(一):高通aimet的安装和试用

高通aimet安装

2022-06-25 17:55:13 1504

原创 leetcode刷题记录:算法(九)动态规划

动态规划(Dynamic Programming,DP)根据百度百科上的定义: 动态规划是求解决策过程最优化的过程 然后各个博客里对动态规划的描述为: 将需要求解的大问题,分解为一个个的小问题,并在计算过程中保存每个小问题的结果以避免重复计算。 动态规划是一种以空间换时间的技术。我看了几个例子,感觉动态规划其实是递归的反推: 递归: 从要求的的问题(顶层)开始,一层一层递归到出口条件,然后再逐层返回 动态规划: 从出口条件开始 ,逐层上升到要求解的问题。 动态规划感觉是迄今为止最难理解的一种算法了,我找了些

2020-11-11 23:09:02 310

原创 leetcode刷题记录:算法(八)并查集(Union find)

并查集(Union find): 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。 我个人理解的人话就是: 将相关的元素并到一个集合里,在这个过程中要先查这些元素是不是已经在集合中 并查集分为三个部分 把每个点所在集合初始化为其自身。通常来说,这个步骤在每次使用该数据结构时只需要执行一次,无论何种实现方式,时间复杂度均为O(N)。 查找元素所在的集合,即根节点。 将两个元素所在的集合

2020-11-10 21:27:22 503 1

原创 leetcode刷题记录:算法(七)回溯法

回溯法(Back Tracking Method): 回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 当问题是要求满足某种性质(约束条件)的所有解或最优解时,往往使用回溯法。 运用回溯法解决问题有以下三个要点: 针对给定的问题,定义问题的解空间; 确定易于搜索的解空间结构(图或者树); 以深度优先方式搜索解空间,

2020-11-08 20:28:28 280

原创 leetcode刷题记录:算法(六)BFS&DFS

广度优先搜索(BFS)和深度优先搜索(DFS)是两种常见的图/树的搜索算法。 广度优先,即优先搜索当前根节点的所有子结点; 深度优先,即优先搜索当前根节点其中的一个子结点,然后再搜索这个子节点的子节点(套娃),直到当前结点没有子节点,才返回上一层。 对于两种搜索算法的实现: 广度优先搜索使用队列(queue)来实现,整个过程可以看做一个倒立的树形: 把根节点放到队列的末尾。 每次从队列的头部取出一个元素,查看这个元素所有的下一级元素,把它们放到队列的末尾。并把这个元素记为它下一级元素的前驱。 找到所要找的

2020-11-07 15:28:23 315

原创 leetcode刷题记录:算法(五)分治法

分治法(Divide&Conquer) 将一个大问题分解为一个个的小问题,然后将小问题解决后再将结果整合以后,就能得到大问题的解 用到了递归 直接看题吧: 53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 题目的难度是简单,突然自卑。想了半天写了个O(n)复杂度的,而且并没有想到分治应该怎么写,用了滑动窗口,先记录一下吧: class Solution: def maxSubArray(self, nums: Lis

2020-11-02 22:38:08 237

原创 leetcode刷题记录:算法(四)递归

递归,是一个自己调用自己的算法。 写递归时最重要的两点是: 确定递归公式 确定边界条件 递归其实不一定比单纯的迭代效率高,要分情况进行考虑。 开始刷题。 50.Pow(x, n) 实现 pow(x, n) ,即计算 x 的 n 次幂函数。 我一看题目,这不白给?两秒写了个弱智代码: class Solution: def myPow(self, x: float, n: int) -> float: if n < 0: x = 1.0/x

2020-11-01 16:01:31 167

原创 leetcode刷题记录:数据结构(一)链表

链表是一种常见的数据结构。 在学习数据结构之前,见过、用过最多的就是数组,那么数组和链表有什么区别呢? 数组中的数据,在内存中的地址是连续的,假设存在一个数组A,我们可以通过A[n]来直接读取数组中的第n+1个 链表中的数据,在内存中的地址不连续,假设存在一个链表B,B[n]这种表达是非法的。对于一个节点node,我们只能通过node.next来找这个结点链接的下一个结点。在内存中,每个结点不止保存当前的数据,还保存着下一个节点的地址。 那么,链表有什么作用呢? 对于数组来说: 读取、修改数据很快,时

2020-10-30 22:58:21 91

原创 leetcode刷题记录:算法(三)滑动窗口算法

滑动窗口是为了减少循环次数。 滑动窗口有几个应用场景: 给定一个整数数组,计算长度为 ‘k’ 的连续子数组的最大总和。 这中应用情况下,窗口大小是固定的,窗口每移动一步,窗口中的数值和上一步中的有重合,这个重合的部分不再参与计算,滑动窗口就是利用这个来将计算量减少。 给定一个字符串S和一个目标字符串T,找到S中包含所有T中字母的最小子字符串。 这种情况下,窗口大小是变化的。先设置窗口大小为0,然后移动右侧边界,逐步扩张窗口,直至能满足要求。 然后尝试从左侧减小窗口,如果不再满足要求,就继续从右侧扩张窗口。

2020-10-28 23:50:50 532

原创 leetcode刷题记录:算法(二)二分法

二分法就不多讲了,适用于排好序的数,可以提升很大的效率。 704.二分查找 执行用时:276 ms, 在所有 Python3 提交中击败了98.03%的用户 class Solution: def search(self, nums: List[int], target: int) -> int: low = 0 high = len(nums)-1 while(low<=high): temp = (low+hig

2020-10-28 20:48:46 191 1

原创 leetcode刷题记录:算法(一)双指针

双指针实际上不能说是一种算法,只是一种技巧。 提到双指针,我第一时间想到的是双循环。 比如说题目给一个列表s,让我们找到列表中的两个数a和b,让a+b=N。 一般的暴力解法,也会用到两个指针,即 for i in range(0,len(s)): for j in range(i+1,len(s)): if(i+j==10): return i,j else: pass 其实这种写法应该是暴力解,时间复杂度是O(n^2)。 对于已经排序(从小到大)的数组,双指针应该是一个指针在头,一

2020-10-27 21:01:22 212 1

空空如也

空空如也

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

TA关注的人

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