- 博客(26)
- 收藏
- 关注
原创 leetcode 0895 最大频率栈 python 题解
① 首先通过一个哈希表,计算每个入栈元素出现的次数(入栈和出站的时候对应元素 加一或减一即可)设计一个类似堆栈的数据结构,将元素推入堆栈,并从堆栈中弹出出现频率最高的元素。如果出现频率最高的元素不只一个,则移除并返回最接近栈顶的元素。首先弹出 频率最高的位置 的数,然后更新①和②,然后更新③。int pop() 删除并返回堆栈中出现频率最高的元素。首先元素入栈,然后更新上述的①和②,然后更新③。频率其实就是计数,计数最先想到的应该是哈希。FreqStack() 构造一个空的堆栈。② 找到频率最高为多少。
2022-11-30 16:29:26 291 1
原创 leetcode 0004 寻找两个正序数组的中位数 python
寻找两个正序数组的中位数 一、思路二、代码1.python1.方法一2.方法二一、思路方法一:直接将两个数组合并(不去重),然后找出位置在中间的数即可(长度为奇数时只有一个,为偶数时,结果为中间两个数字的平均)方法二:根据方法一可以知道,中位数,就是两个数组中第k小的数。我们可以设两个指针,在两个数组中去寻找第k小的数(k为总长度的一半)。利用二分法的思想,每次排除一些不可能是第k个的数,然后重新寻找。假设两个数组为A,B。每次比较的为A[k//2-1],B[k//2-1],较小者及其之前的数都必
2021-08-13 16:54:28 130
原创 leetcode 0008字符串转整数 python
文章目录一、思路二、代码1.python一、思路先保存符号,然后从左往右存入数字,再从右往左去除数字,判断一下是否超界,即可。二、代码1.python代码如下:class Atoi(object): def __init__(self): self.ans = 0 self.state = 'start' self.sign = 1 self.table = { 'start':['start','
2021-07-29 14:59:05 141
原创 leetcode 0007 整数反转 python
文章目录一、思路二、代码1.python一、思路先保存符号,然后从左往右存入数字,再从右往左去除数字,判断一下是否超界,即可。二、代码1.python代码如下:class Solution: def reverse(self, x): if x < 0: flag = 1 x = -x s = str(x) ss = '' res = [] for i
2021-07-28 08:59:31 142
原创 leetcode 0003 无重复字符的最长子串 python C++
文章目录一、思路二、代码1.python2.C++一、思路滑动窗口。固定左端,右端一直扩大,并计数。如果窗口内存在相同的元素,就将窗口左端向右滑动,直到不存在相同元素。二、代码1.python代码如下:class Solution: def lengthOfLongestSubstring(self, s) : l = 0 res = 0 now = 0 lookup = set() for r in ra
2021-07-22 16:56:00 132
原创 leetcode 0018 四数之和 python与C++
文章目录一、思路二、代码1.python2.C++一、思路与三数之和一样。三数之和是把最后两个数用双指针的方法去做,只筛选一个数就可以,四数之和也是一样的,只不过是前边筛选的时候三数之和是筛选一个,四数之和是筛选两个,明白了这个之后,就可直接开始写了。在三数之和前边套一层循环即可,其余的全都一样。二、代码代码如下:1.pythonclass Solution: def fourSum(self, nums: List[int], target: int) -> List[List
2021-02-06 09:37:11 331
原创 leetcode 0015 三数之和 python与C++
文章目录一、思路二、代码1.python2.C++一、思路我们先把数组排序,第一个数一定要小于等于0,否则一定不存在三个数之和为0.题目要求不重复,首先保证第一个数不重复,当nums【i+1】 等于nums【i】时,就跳过,然后保证后两个数不重复,如果后两个数与第一个数能构成答案,那么和他俩相同的值一定能构成答案,所以把所有相同的值都跳过即可。接下来说一下思路,首先对数组排序,第一个数要小于等于0,第二个数从第一个数后边一位开始遍历,第三个数从最后一位往前遍历,找到符合答案的,存起来,然后就把第二
2021-02-05 10:29:07 227
原创 leetcode 0454 四数相加II python 与C++
文章目录一、思路二、代码1.python2.C++一、思路这道题其实和两数之和挺像。我们把A+B,C+D分为两组,那么就变成了两数之和,如果暴力的话,需要4重for循环,这样只需要两个2重for循环。首先A+B的结果存在哈希表mmm中,然后C+D的结果ttt去查询哈希表mmm中有无-t-t-t存在,存在就把结果加上dic[-t]。二、代码代码如下:1.pythonclass Solution: def fourSumCount(self, A: List[int], B: List
2021-02-04 09:03:47 126
原创 leetcode 0001 两数之和 python与C++
文章目录一、思路二、代码1.python2.C++一、思路经典两数之和。最笨重的双for循环暴力法就不写了,写一下哈希。建立一个哈希表,每次查询target与当前值的差值在不在表中,如果在,则说明有两个数的和等于target。 如果不在表中,就将当前值放到哈希表中,并记录一下他的位置。二、代码1.python代码如下:class Solution: def twoSum(self, nums, target): dic = {} n = len(nums)
2021-02-03 13:42:28 197
原创 leetcode 0202 快乐数 python与C++
文章目录一、思路二、代码1.python2.C++一、思路首先我们要分析一下,对一个数其各位数字的平方求和会出现什么样的情况。①陷入一个循环,此循环内只有一个1(快乐起来了)②陷入一个循环,循环内不包含1所以我们需要 查看当前数其各位数字的平方求和有没有在之前出现过,出现过就进入了情况②,没出现就继续往下算。二、代码1.python代码如下:class Solution: def isHappy(self, n) : def res(n): num = 0
2021-02-02 08:48:49 223
原创 leetcode 0349 两个数组的交集 python与C++
文章目录一、思路二、代码1.python2.C++一、思路种类问题一般都可以考虑哈希(或set)。首先我们统计有nums1和nums2各有几种数字,然后找出共有的即可二、代码1.python代码如下:class Solution: def intersection(self, nums1, nums2) : res = [] dic1,dic2 = {},{} for i in nums1: dic1[i] = dic1.get(i,0) +
2021-02-01 09:13:47 162
原创 leetcode 0575 分糖果 python与c++
文章目录一、思路二、代码1.python2.C++一、思路种类问题一般都可以考虑哈希(或set)。首先我们统计有多少类糖果(用set应该也可以),然后妹妹先挑,要求种类最多,如果种类数countcountcount小于等于糖果个数的一半,那么妹妹无论怎么挑,最多也就是countcountcount种。如果种类数countcountcount大于糖果个数的一半(比如[1,1,2,3,4,4],4种),妹妹最多只能拿糖果个数的一半的糖果(这个例子中是3个),所以这道题就很简单了,只需要比较一下种类数和糖
2021-01-31 10:05:34 261
原创 leetcode 0383 赎金信 python与c++
文章目录一、思路二、代码1.python2.C++一、思路判断magazine中的字母能否组成ransomNote。magazine中的字母可以比ransomNote多,所以我们对magazine中的字母简历哈希表m(char,int)m(char,int)m(char,int),然后ransomNote对mmm查表,mmm在相应位置减1,若果出现小于0的数,则不能构成。PS:当ransomNote中出现了mmm中不存在的值时,可以直接返回false。二、代码1.python代码如下:cl
2021-01-30 09:25:59 113
原创 leetcode 0242 有效的字母异位词 python与C++
文章目录一、思路二、代码1.python2.C++一、思路判断两个单词中字母个数是否相同,当两个单词长度不同时,必然不是。首先我们建立一个哈希表mmm,来统计sss中的字母个数,然后遍历ttt,在哈希表mmm中对应位置减1,如果两个单词中字母个数是否相同,那么mmm中的val值最应该全为0。二、代码1.python代码如下:class Solution: def isAnagram(self, s, t) : if len(s) != len(t): retur
2021-01-29 10:23:20 134
原创 leetcode 0142 环形链表II python与C++
文章目录一、思路二、代码1.python2.C++一、思路分两步:第一步,判断有没有环。判断链表是否有环,可以用快慢指针的方法,慢指针一次走一个节点,快指针一次走两个节点,若果快慢指针会相遇,则一定存在环。第二步,找到入口。假设头结点到环入口的节点数为xxx,环入口到相遇点的节点数为yyy,相遇点到环入口的距离为zzz,如下图所示。slow走过的节点数为 x+yx+yx+yfast走过的节点数为x+y+n(y+z)x+y +n(y+z)x+y+n(y+z)fast走过的节点数还是slow的
2021-01-28 09:20:34 174
原创 leetcode 0206 反转链表 python与C++
文章目录一、思路1.示例图二、代码1.python2.C++一、思路反转链表。从头遍历链表,将当前节点的next指向前项节点即可,但如果没有中间变量,就无法从该节点沿着原来的链表顺序继续往后走,所以需要一个中间变量rrr,让rrr先指向该节点的next,然后将该节点的next指向前项节点,该节点变成前项节点,rrr变成下一个当前节点。(说的有点多,过程都说出来了。。)1.示例图二、代码1.python代码如下:# Definition for singly-linked list.#
2021-01-27 10:35:34 74
原创 leetcode 0203 移出链表元素 python与C++
文章目录一、思路二、代码1.python2.C++一、思路简单的链表删除问题。找到需要删除的元素节点,将其前项节点指向其后向节点即可。需要注意删除的节点在第一个的情况,这里我引入了一个头结点。PS:其实有种“不要脸”的做法,就是把链表存入数组,在数组中删除,在依次将数组串成链表,由于是练习,就不这么做了(狗头)。二、代码1.python代码如下:# Definition for singly-linked list.# class ListNode:# def __init__
2021-01-26 09:47:03 154
原创 leetcode 0059 螺旋矩阵II python与c++
文章目录一、思路二、代码1.python2.C++一、思路这道题感觉就是模拟过程,设置好拐点。旋转顺序是按照map =【(0,1),(1,0),(0,-1),(-1,0)】的循环进行的,可以让数组按照这个map规律旋转,我们观察这个map可以发现,每一项的did_idi 都等于前一项的djd_jdj,每一项的djd_jdj都等于前一项的−di-d_i−di,所以可以简化一下代码。二、代码1.python代码如下:class Solution: def generateMatrix(
2021-01-25 11:05:02 268 2
原创 leetcode 0209 长度最小的子数组 python与C++
文章目录一、思路二、代码1.python2.C++一、思路滑动窗口,先右边扩大窗口,直到子数组和大于S,然后左边开始缩小窗口直到子数组和小于S。每次大于等于S时,计算一下子数组内的元素个数,找出最小即可。注意有两个边界条件需要考虑:①给定空数组②给定的数组中所有元素加起来,还是小于S二、代码1.python代码如下:class Solution: def minSubArrayLen(self, s, nums) : if not nums: return
2021-01-24 10:12:34 242 2
原创 leetcode 0026 删除排序数组重复项 C++ 与 python
文章目录一、思路二、代码1.python2.C++一、思路快慢指针的方法,首先快指针找到与慢指针不重复的一项,然后慢指针+1,将快指针的值赋给慢指针即可。二、代码1.python代码如下(示例):class Solution: def removeDuplicates(self, nums) : n = len(nums) i,j = 0,1 while j < n: if nums[i] != nums[j]:
2021-01-23 10:14:07 198
原创 leetcode 0027 移除元素 python C++
文章目录一、思路二、代码1.python2.C++一、思路题目要求原地修改,如果非原地修改我们可以怎么做?建立一个新的数组,把满足要求的值存到新的数组中。现在我们可以把原数组也看成这个新的数组,双指针,一个指针 j 表示原数组的指针用来寻找满足条件的值(非val),一个指针 i 表示新数组的指针,用来存储满足条件的值。二、代码1.python代码如下:class Solution: def removeElement(self, nums, val) : # 1 非
2021-01-22 09:46:59 115
原创 leetcode 0035 搜索插入位置 c++与python两种语言
文章目录一、思路二、代码1.python2.C++一、思路搜索数组中,第一个比target大的值(可以相等),这个值的位置,就是答案所求的位置。我们可以从左往右遍历数组,去寻找第一个大于等于target的值,时间复杂度为O(n)。也可以二分查找,时间复杂度为O(log n),只需稍微修改二分查找代码,即可换来时间上的优势。二、代码1.python代码如下(示例):class Solution: def searchInsert(self, nums, target) :
2021-01-21 10:37:55 191 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人