![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 61
战场小包
一大一新生,希望与众大牛学习(风云变幻啊,我已经是研一了)
展开
-
你听说过摩尔投票法吗
前言前几天在刷力扣题目时,看官方题解发现的算法,我感觉这个算法非常有意思,是一个很好的思维开拓,因此我整理摩尔投票算法的一些知识,分享给大家。摩尔投票法博耶-摩尔多数投票算法( Boyer–Moore majority vote algorithm ),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。算法思想在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍原创 2021-10-28 09:57:56 · 520 阅读 · 0 评论 -
力扣:583. 两个字符串的删除操作
题源: 583. 两个字符串的删除操作本题要求经过删除之后两个字符串相等,求解最少的操作次数。根据贪心思想,最后剩余的字符串越长,删除操作越少。那么该题也就转化成了求两个字符串的最大公共子序列长度即可。最长公共子序列的递推公式:具体代码:def minDistance(word1, word2): n, m = len(word1), len(word2) # dp = [[0] * (m + 1) for _ in range(n + 1)] dp = [[0 for _原创 2021-09-25 11:31:41 · 198 阅读 · 0 评论 -
力扣:725 分隔链表
题源: 分隔链表算法流程:遍历链表,求出链表长度listLenlistLen除以k得到平均长度splitLen和余数remainder。题目要求每部分的长度应该尽可能的相等:前面的部分的长度应该大于或等于后面的长度因此remainder应当在前remainder上平均分配举个例子:root = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], k = 3,len = 11, k = 3,splitLen, remainder = 11 // 3, 11 %原创 2021-09-22 09:06:25 · 141 阅读 · 0 评论 -
力扣:673. 最长递增子序列的个数
题源:最长递增子序列的个数做这个题之前可以顺路复习一下LIS最长递增子序列问题。1. LIS题源:最长递增子序列最长递增子序列有两种做法;O(n2)的动态规划和O(nlogn)的贪心+二分。1.1 动态规划定义dp[i]为以第i个元素为结尾的最长上升子序列长度,其中num[i]必须被选择,那么状态转移方程为(dp初始化值为1):dp[i] = max(dp[j]) + 1; j < i, num[i] > num[j]def findNumberOfLIS(nums):原创 2021-09-21 21:02:53 · 192 阅读 · 0 评论 -
力扣每日一题:650 只有两个键的键盘
题源:只有两个键的键盘初读这个题,感觉就应该是动态规划,但是找不出状态转移方程,当看到题解之后还是感到非常遗憾,就差一点点。1. 思路与想法题目中只有两种操作,copy和paste,其中copy必须拷贝当前的所有内容,最终得出n个A所需操作的最小次数。最小次数,copy全部,这两个在一开始就给予了我贪心的感觉,对于n个A来说,它期望的上一次操作是n/2处整体复制粘贴过来,n/2是n/4…依次类推,就可以得到最小的次数。但很快我发现了上述思想的漏洞,举个例子,如果此时的n是15,那就没法通过n/2-&原创 2021-09-19 20:37:31 · 222 阅读 · 0 评论 -
二分查找算法
二分查找概述二分查找作为经典的查找算法,思想比较简单,但每次写相关代码,总出现左右区间混乱,最终造成死循环。代码分析区间的左右开闭问题: [0, length - 1]循环边界: while left < right,这样可以保证最终返回值left == right,随便返回哪个都可以区间[left.. right]可以划分为两种情况:分为[left..mid]和[mid+1..right],分别对应right = mid和left = mid + 1分为[left..mid-1]原创 2021-09-08 16:35:49 · 181 阅读 · 0 评论