leetcode
文章平均质量分 62
战场小包
一大一新生,希望与众大牛学习(风云变幻啊,我已经是研一了)
展开
-
你听说过摩尔投票法吗
前言前几天在刷力扣题目时,看官方题解发现的算法,我感觉这个算法非常有意思,是一个很好的思维开拓,因此我整理摩尔投票算法的一些知识,分享给大家。摩尔投票法博耶-摩尔多数投票算法( Boyer–Moore majority vote algorithm ),中文常作多数投票算法、摩尔投票算法等,是一种用来寻找一组元素中占多数元素的常数空间级时间复杂度算法。算法思想在集合中寻找可能存在的多数元素,这一元素在输入的序列重复出现并占到了序列元素的一半以上;在第一遍遍历之后应该再进行一个遍历以统计第一次算法遍原创 2021-10-28 09:57:56 · 950 阅读 · 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 · 227 阅读 · 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 · 158 阅读 · 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 · 214 阅读 · 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 · 242 阅读 · 0 评论 -
leetcode刷题记录——二分简单题
35. 搜索插入位置题源:搜索插入位置刷题时间:20210908二分查找的典型题,查找target元素,若查到返回索引,查不到返回插入位置索引。也就是返回第一个大于或等于target的位置。def searchInsert(nums, target): left, right = 0, len(nums) while left < right: m = left + (right - left) // 2 # 防止越界 if nums[m] &原创 2021-09-14 20:38:28 · 148 阅读 · 0 评论