自定义博客皮肤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 1494

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

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

2020-11-11 23:09:02 306

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

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

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

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

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

2020-11-08 20:28:28 276

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

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

2020-11-07 15:28:23 308

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

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

2020-11-02 22:38:08 236

原创 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 165

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

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

2020-10-30 22:58:21 90

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

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

2020-10-28 23:50:50 526

原创 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 190 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 208 1

空空如也

空空如也

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

TA关注的人

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