leetcode
Jackie_Wang11
while(days<=lifetime) {
++learning;
}
展开
-
三数之和 & 最接近的三数之和
可以看到这道题可以演化成三数之和,所以说三数之和可以当作这道题的一个特例,我们完全可以用三数之和的思路解决这道题,但是我们并不需要判断左右指针已经重复问题,如果你想缩短运行时间,那么确实可以多做一些判定。,可能会有一个疑问,三个数,为什么会是双指针啊,最近好久没有做题了,当看到这个题的时候,我的想法也是用三个指针去遍历,但是发现其实有一个指针可以是固定的,接下来看一下这个题的答案就知道了。2)如果指针移动时,发现当前所指向的元素和上一个元素是一样的,那么应该跳过。第二个想法就是判断特例,有哪些特例呢?原创 2022-10-05 09:39:12 · 155 阅读 · 0 评论 -
leetcode 6084. 最多单词数的发件人 (python defaultdict与map的灵活应用)
解题思路首先解决messages列表中每一条信息的单词数量,即 words = message[i].cout(" ")+1其次是建立一个字典,键是sender 值是该发送者发送的单词数量,那么这个使用defaultdcit就能完美解决,cnt = defaultdict(int) cnt[sender]+=words那么我们最后一个字典,键是每一个sender,值是他所有发送的所有单词数,例如上述的例子中,最后生成的cnt为:defaultdict(<class 'int'>, {.原创 2022-05-30 10:05:20 · 225 阅读 · 0 评论 -
前缀和算法总结,Leetcode周赛最小平均差(Python实现)
首先为什么要用前缀和?前缀和的优势在哪里?给定一个列表[a1,a2,a3,a4,a5,a6,a7,a8,a9,a10],如果我们要求前i个元素的和,一般怎么做? python中自带的api是不是就可以基本实现比如我们像要求前5个数的和,如下所示:a = [1,2,3,4,5,6,7,8,9]print(sum(a[:5]))>> 15sum()函数其实就是帮我们做了一次数组遍历,其时间复杂度是O(n),这在平时计算一个这样简单的前i个数的和,时间复杂度可以勉强接受,但是在解决问题时原创 2022-05-01 10:10:47 · 311 阅读 · 0 评论 -
最长单词 c++实现
# include <iostream>using namespace std;int main(){ string res,str; while (cin>>str){ // str.back()等价于str[str.size()-1] if (str.back()=='.') str.pop_back(); if (str.size()>res.size()) res=str; } cout.原创 2022-04-28 11:14:50 · 1525 阅读 · 0 评论 -
Leetcode 56.合并区间 Python实现
这道题只要能发现一个规律就能做出来:如果列表中每一个子列表的第一个元素是升序的,那么只要前一个子列表的第二位元素比后一个子列表的第一位元素大,就可以将这两个子列表(区间)进行合并,举个例子,如果[1,3]和[2,6],这两个区间的第一位分别是1和2满足升序,那么[1,3]中第二位元素3>[2,6]中第一位元素,即可以将这两个区间合并为[1,6]那么我们应该怎么实现呢?难道要遍历intervals数组的同时在内部不断合并吗?这样也太麻烦了,何不构建一个列表merge,在遍历intervals的同时将.原创 2022-04-26 11:26:59 · 924 阅读 · 0 评论 -
Leetcode33.旋转排序数组与面试题11.旋转数组的最小数字 Python实现及其详解
本题要点就是:只在有上升顺序的那一端做二分查找,妥妥的能解决,并且思路清晰,虽然思路很简单,但是二分查找看的是细节,判断语句中使用大于等于,还是大于,或者使用小于等于还是小于,这些写错一个就可能会要了你的命!代码实现:class Solution: def search(self, nums: List[int], target: int) -> int: n = len(nums) left,right =0,n-1 while left<=righ.原创 2022-04-25 15:45:21 · 1298 阅读 · 0 评论 -
判断完全数,判断质数 python c++实现
、原题链接:https://www.acwing.com/problem/content/727/由于时间复杂度限制,判断时判断遍历所有数会超时,只需要判断到根号a的情况即可,此时需要注意,如果a%i==0那么i是a的约束,a/i也是a的约束,如果i!=a/i的话,那么此时也需要把这个数加上import mathwhile True: try: n = int(input()) for _ in range(n): a = int(in原创 2022-04-24 21:01:13 · 1799 阅读 · 0 评论 -
环形链表Ⅰ,Ⅱ三种解决方法(Python实现)
环形链表Ⅰ只是判断给定的链表中是否存在环形链表,存在则返回True,不存在则返回False环形链表Ⅱ则是要返回链表开始入环的第一个节点。一、快慢指针双指针第一次相遇:设两指针fast,slow指向链表头部,fast每轮走2步,slow每轮走1步,如果fast指针走过链表末端,说明链表无环 if not fast or not fast.next :return None当fast==slow时,两个指针在环中第一次相遇,分析fast和slow的步数关系,设链表共有a+b个节点,其中链表头部到链表原创 2022-04-18 14:46:05 · 1409 阅读 · 0 评论 -
如何找出列表中相同元素的所有索引值 python实现
如何找出列表中相同元素的所有索引值 python实现index()只能找到第一个索引位置,那么如何找到相同元素的所有索引值呢?可以通过以下方式实现:nums = [2,5,5,11]# 找出元素值为5的索引index = [i for i,val in enumerate(nums) if val==5]两数之和:方法一:def twoSum(nums, target): nums1 = sorted(nums) left,right = 0,n-1 res = [] while原创 2022-04-18 09:46:02 · 6678 阅读 · 1 评论 -
python 将列表中的奇数位置元素与偶数位置元素调换
python 将列表中的奇数位置元素与偶数位置元素调换今天突然想到了这个问题,想想这种情况自己竟然没有实现过,所以花了几分钟写一下这里需要注意的是,列表的长度可能是奇数个也有可能是偶数个num = [1,3,5,6,8,9,4,5,6] --> num=[3,1,6,5,9,8,5,4,6]实现方式:num = [1,3,5,6,8,9,4,5,6]for i in range(0,len(num),2): try: num[i],num[i+1] = num[i+原创 2022-03-30 10:11:02 · 3435 阅读 · 0 评论 -
python 使用set()对列表去重如何不改变元素顺序
首先,定义一个列表,即原列表:list1 = [0, 3, 2, 3, 1, 0, 9, 8, 9, 7];然后,使用set()对原列表去重list2 = list(set(list1)),得到[0, 1, 2, 3, 7, 8, 9];原理:set(list1)将列表list1转换为集合,集合是一个无序的不重复元素序列,然后再list将集合转换为列表最后,将list2中的元素按照list1中元素出现的顺序排序,即不改变原来元素顺序list2.sort(key = list1.index)此时,原创 2022-03-24 11:11:59 · 5093 阅读 · 0 评论 -
汽水瓶,字符串加解密, 整数与IP地址间的转换,统计字符
汽水瓶:while True: try: n = int(input()) if n==0: break a = n cnt=0 while n>1: a = n//3 # 此时的a是新增的可以喝的汽水瓶数 cnt+=a b = n%3 # 此时是余下的汽水瓶数 n = a+b原创 2022-03-23 10:58:06 · 294 阅读 · 0 评论 -
python float(“inf“),float(“-inf“) ,“a“,“A“,“z“,“Z“的ASCII, 进制转换:将 2进制/8进制/10进制/16进制数字符串转换成int型
float(“inf”):正无穷float("-inf"):负无穷原创 2022-03-23 10:36:09 · 838 阅读 · 0 评论 -
回溯和递归区别
最近看数据结构,发现用到了很多递归和回溯的问题,实在是不知道这两具体有啥区别,最近查了点资料,大概总结一下。为了描述问题的某一状态,必须用到该状态的上一状态,而描述上一状态,又必须用到上一状态的上一状态……这种用自已来定义自己的方法,称为递归定义。形式如 f(n) = n*f(n-1), if n=0,f(n)=1.从问题的某一种可能出发, 搜索从这种情况出发所能达到的所有可能, 当这一条路走到” 尽头 “的时候, 再倒回出发点, 从另一个可能出发, 继续搜索. 这种不断” 回溯 “寻找解的方法, 称作原创 2022-02-13 14:29:14 · 365 阅读 · 0 评论 -
Python 判断字符串、大小写转换,获取字母的ASCII值,计数counter(),找到指定元素索引index()与find()区别,s.replace(old, new, count)
文章目录一、判断字符串:二、大小写转换三、获取字母ASCII值四、str.counter(i)五、找到指定元素索引index()六、s.replace(old, new, count)一、判断字符串:s代表字符串s.isalnum() 判断字符串所有字符是否都是数字和字母组成s.isalpha() 判断字符是否都是字母s.isdigit() 判断字符是否都是数字s.islower() 判断字符是否都是小写s.isupper() 判断字符是否都是大写s.istitle()原创 2022-03-20 21:49:50 · 1932 阅读 · 0 评论 -
HJ23 删除字符串中出现次数最少的字符
我的解法,我发现想复杂了from collections import Counterwhile True: try: strs = input() cnt = Counter(strs)# cnt1 = sorted(cnt.items(),key=lambda x:x[1]) min_value = min(cnt.values()) res1 = [] for key,value in cn.原创 2022-03-20 16:40:58 · 315 阅读 · 0 评论 -
HJ4 字符串分隔
Python实现while True: try: string = input() n = len(string) # 如果小于8补齐,大于8,先把以8为一组print,之后剩下的就是用0补齐 repeat = n//8# print(repeat) while repeat>=0: if repeat==0 and string: n .原创 2022-03-19 20:23:38 · 510 阅读 · 0 评论 -
提取字符串中的所有数字并按照字典序升序排列
提取字符串中的所有数字并按照字典序升序排列eg:输入:3d50J Aa3 输出:0335while True: try: lst = list(input()) res = [] for i in lst: if i.isdigit(): res.append(i) print(res) print("".join(sorted(res))) excep原创 2022-03-19 18:11:47 · 727 阅读 · 0 评论 -
0-1背包问题python实现
不会的小伙伴可以看一下视频:https://www.bilibili.com/video/BV15B4y1P7X7/Python实现# N件物品,一个容量为V的背包N,V = map(int,input().split())weight = []val = []# 创建两个列表,分别装入第i个物品的体积wi和价值vifor _ in range(N): wi,vi = map(int,input().split()) weight.append(wi) val.app.原创 2022-03-19 17:04:31 · 4541 阅读 · 0 评论 -
Python set 计算集合的并集,交集,差集以及对称集(补集)
创建集合a =set([iterable]) # set()中可以是列表,也可以是range(n)创建两个集合a= set([1,2,3])b = set([2,3,4])并集:返回一个新的集合,包括集合a和b的所有元素a|bprint(a|b)# {1,2,3.4}交集:返回一个新的集合,包括同时在集合a和b中的共同元素a&bprint(a&b)# {2,3}差集:返回一个集合,包括在集合a(b)中但不在集合b(a)中的元素a-b / b-a原创 2022-03-08 15:46:50 · 3524 阅读 · 0 评论 -
Python如何打印出两个字母之间的字母?例如:循环打印出“a“到“z“之间的字母 ,ord()与chr()函数的使用
如何打印出两个字母之间的字母?例如:循环打印出"a"到"z"之间的字母,并返回列表首先需要知道两个函数ord(): 对应字符转ascii码chr(): ascii码转对应的字符使用上述两个函数可以实现:res = []for i in range(ord("a"),ord("z")+1): res.append(chr(i))print(res)['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',原创 2022-03-06 15:12:59 · 2430 阅读 · 0 评论 -
Python实现找到一个列表的最长不连续子集的长度
找到一个列表的最长不连续子集的长度,什么叫做不连续的子集,定义是两个绝对值之差大于1的数组子集例如:[1,2,3,6,8,9,4,5]的最长不连续子集的长度为4,[1,3,5,8],[2,4,6,8]nums = [1,2,3,6,8,9,4,5]nums_new = sorted(nums)res = [nums_new[0]] # 把第一位放进来tail = 0while tail<len(nums)-1: tail+=1 if nums[tail]-res[-1]&原创 2022-03-06 09:54:24 · 544 阅读 · 0 评论 -
Python 快速排序思想及模板, 解决Leetcode215数组中的第K个最大元素快速排序
推荐一篇讲快速排序思想很明白的博文:https://blog.csdn.net/jiangtianjiao/article/details/88929408内容如下:基本思想选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以达到全部数据变成有序。步骤(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在基准的后面(相同的原创 2022-03-04 20:05:09 · 643 阅读 · 0 评论 -
Python DFS BFS实现 Leetcode200 岛屿数量 Leetcode695岛屿的最大面积 Leetcode463 岛屿的周长 Leetcode257 二叉树的所有路径
原创 2022-03-04 19:49:54 · 629 阅读 · 0 评论 -
牛客网在线编程常见输入输出练习
ACM模式下的常见输入输出A+B(1)A+B(2)A+B(3)A+B(4)A+B(5)A+B(6)A+B(7)字符串排序(1)字符串排序(2)字符串排序(3)明天是第一次参加互联网大厂笔试机考,所以练习一下牛客网上ACM模式的常见输入和输出,防止明天出岔子A+B(1)while True: try: a,b = map(int,input().split()) print(a+b) except: breakA+B(2)while True: try: t = int(原创 2022-03-04 15:23:34 · 1118 阅读 · 0 评论 -
好理解的DP系列 Leetcode62.不同路径+Leetcode64.最小路径和
好理解的DP系列 Leetcode62.不同路径+Leetcode64.最小路径和一、不同路径二、最短路径(最小路径和)一、不同路径思路:用f(i,j)表示从左上角走到(i,j)的路径数量,其中i和j的范围分别是[0,m)和[0,n)。由于我们每一步只能向下或者向右移动一步,因此如果我们想要移动到(i,j),如果向下走一步,会从(i-1,j)移动过来,如果向右走一步,会从(i,j-1)移动过来,因此我们可以得到状态转移方程:f(i,j)=f(i-1,j)+f(i,j-1)注意: 如果i=0或者j原创 2022-03-04 14:37:28 · 414 阅读 · 0 评论 -
python Counter以及Counter().most_common(n)的使用,美团周赛 2170. 使数组变成交替数组的最少操作数
Counter()函数:Counter是dict子类,用于计数可哈希的对象。元素被作为字典的key存储,它们的计数作为字典的value存储注意:Counter()函数返回的是字典Counter().most_common([n]) 从多到少返回一个有前n多的元素的列表,即以[(元素1,次数),…,(元素n,次数)]返回出现次数前n的统计列表class Solution: def minimumOperations(self, nums: List[int]) -> int:原创 2022-03-04 10:40:53 · 886 阅读 · 0 评论 -
二维数组的花式遍历技巧 (Leetcode 旋转图像、螺旋矩阵、螺旋矩阵Ⅱ)python实现
一、旋转图像题意说的是原地旋转,所以不能构建一个列表再次存储这个matrix,只能做类似于matrix[i][j] = matrix[j][i]之类的操作,但是这不妨碍去寻找坐标i,j的变换规律,不难发现:旋转90度后的公式为:martix[i][j]->matrix[j][n-1-i]代码实现如下: n = len(matrix) # 深拷贝 matrix->tmp tmp = copy.deepcopy(matrix) # 根据元素旋转公式,遍历修改原矩阵matrix的各元素原创 2022-03-03 21:28:47 · 745 阅读 · 0 评论 -
回溯法解决全排列,全排列Ⅱ,复原 IP 地址,括号生成
一、全排列输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] def permute(nums: List[int]) -> List[List[int]]: # 回溯加剪枝 # 合法路径保存列表 result = [] # 记录当前路径 path = [] # 回溯函数 def back原创 2022-03-03 20:58:37 · 228 阅读 · 0 评论 -
list转set:TypeError: unhashable type: “list“, 如何对二维列表去重?
对于一维列表可以直接使用set进行去重:对于二维列表直接使用set会报错TypeError: unhashable type: "list"那么针对二维列表如何去重呢?通过如下代码可以实现:lst = [[1,2,3], [1,2,3], [2,3,4], [2,3,4], [3,4,5], ]res = list(set([tuple(t) for t in lst]))res = [list(s) for s in r原创 2022-03-03 16:04:10 · 993 阅读 · 1 评论 -
对于字符串中既存在连续数字又存在连续字母的字符串,如何提取连续数字,Leetcode394.字符串解码
例如"2345abc",如何输出2345?s = input()num = 0for c in s: # 判断是否是数字 if c.isdigit(): # 通过此操作位数不断上升 # num = 2 # num = 2*10+3 # num = 23*10+4 # num = 234*10+5 num = num*10+int(c)print(num)Leetcode394.字符串解码本题核心思路是在栈里面每次存储两个信息(左括号前的字符串,左括号前的数字),比原创 2022-02-26 10:47:04 · 649 阅读 · 0 评论 -
Python: 将list中的每一个str型元素转换为int型元素(一维和二维)、将找出二维列表中的最大值
例如 a=["1","2","3","4"]想要转换为 a=[1,2,3,4],有以下两种方法方法一:列表推导式a = [int(num) for num in a]方法二:map()a = list(map(int,a))针对二维列表a=[["1","2","3","4"],["4","5","6","7"]]a = [[ int(num) for num in lst ] for lst in a]...原创 2022-02-20 11:15:59 · 8366 阅读 · 0 评论 -
HJ39 判断两个IP是否属于同一子网
HJ39 判断两个IP是否属于同一子网这道题是华为2019年暑假实习生机考的一道题,这两天在网上找到的,不得不说,必须得在牛客网上多联系一下编程环境,这道题,需要注意的有一下几点:需要单独判断一下子网掩码,因为它的首和尾都有特殊规定必须是255和0,需要计算ip地址和子网掩码的与结果,与结果只有十进制可以算,所以需要将计算后的结果转换为二进制 bin(a&b),并且输入的时候,需要按照以下形式while True: try: 输入1 = input() 输入2 = input()原创 2022-02-20 10:14:19 · 1153 阅读 · 0 评论 -
Python 双指针系列(Leetcode1 两数之和 Leetcode15. 三数之和 Leetcode 31. 下一个排列)
Leetcode1 两数之和Leetcode1 两数之和,这道题逻辑应该很简单,我认为是最简单的简单题了,没什么好说的class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: result = [] n = len(nums) for i in range(n): for j in range(i+1,n):原创 2022-02-09 14:13:59 · 1020 阅读 · 0 评论 -
python functools.cmp_to_key()使用 Leetcode 179 最大数 剑指 Offer 45 把数组排成最小的数
python functools.cmp_to_key使用一、python3 functools.cmp_to_key二、Leetcode1、Leetcode179 最大数2、剑指 Offer 45 把数组排成最小的数一、python3 functools.cmp_to_keycmp_to_key() 排序比较方法cmp是比较的意思(compare),cmp函数在python2中使用,Python 3 为了语言的简洁性去掉了 cmp 这个参数,在 Python3 重自定义比较函数需要通过 cmp_原创 2022-02-08 22:02:37 · 1044 阅读 · 0 评论 -
Python 单调栈(单调递减栈)Leetcode739.每日温度 Leetcode42.接雨水
单调栈也是笔试面试的时候经常出现的考点,经典的题目如Leetcode739.每日温度 与 Leetcode42.接雨水,这两个题均是维护一个单调栈注意:1)题目一般给的是一个数组,那么栈中存放的可以是数组的下标,也可以是数组元素,这里要区分好。2)根据题意看是要维护一个单调递增还是单调递减的栈,上述两题均是维护一个单调递减栈伪代码: stack = [] # 创建一个栈,并维护其形成一个单调栈 ans = [0]*len(数组) or ans = 0 # 看结果需要返回的是一个数还是一个列表原创 2022-01-22 10:32:03 · 1057 阅读 · 0 评论 -
Python heapq库方法详细介绍,最小堆的实现,Leetcode215 数组中的第K个最大元素(暴力解法、维护最小堆(大小为n和长度为k)、快排)
数据结构:堆的特点1、内部数据是有序的2、可以弹出堆顶元素,最小堆(小根堆)弹出的最小值,最大堆(大根堆)弹出的就是最大值3、每次加入新元素或弹出栈顶元素后,调整堆使之重新有序,时间复杂度O(logn)最小堆: 就是具备每一个父节点都小于其子节点这一特点的一个二叉树如图所示,绘制最小堆就是将一个数组,从上到下从左至右绘制出来即可,可以发现每一个父节点均满足小于其所有子节点。Python heapq() 模块,可以实现最小堆1、最小堆的创建:要创建堆,使用初始化为 [] 的列表,或者原创 2022-01-21 11:38:24 · 1377 阅读 · 0 评论 -
Python str.replace()方法 剑指Offer 05.替换空格+Leetcode20题 有效的括号(str.replace()解法,经典创建辅助栈解法,栈配合字典速度最快)
语法:str.replace(old,new,max)old – 将被替换的字符串new–新字符串 ,用于替换old字符串max–字符串替换次数不超过max次string = "this is string example....wow!!! this is really string"print(string.replace("is", "was"))print(string.replace("is", "was", 3)) # 替换不超过三次# thwas was string ex.原创 2022-01-21 10:36:32 · 1169 阅读 · 0 评论 -
python数据结构list篇学习,一些自己总结的知识点
常规的列表知识点可以看菜鸟教程,这里总结一下平时做题遇到的或者一些不常见的知识点。list_test = [1,2,3]a = list_testprint(a)b,c,d = list_test # 前面的变量数一定与列表的元素数对应,不然会报错print(b)print(c)[1, 2, 3]12list1 = [1,2,3]list2 = [3,4,5]print(list1+list2)[1, 2, 3, 3, 4, 5]Python List.pop()方法p原创 2021-12-22 10:55:08 · 1576 阅读 · 0 评论 -
Python in的常见使用 HJ75 公共子串计算
in的使用列举两个比较常见的使用方法,在刷题的时候经常会用到用法一:判断列表是否包含某个元素a = [1,2,3,4,5]b = 5c = 6print(b in a)print(c in a)# True# False用法二:判断字符串是否包含某一个子串a = "aacss"b = "aa"c = "css"d = "sdsa"print(b in a)print(c in a)print(d in a)# True# True# Falsein的使用 HJ原创 2022-01-20 22:19:08 · 577 阅读 · 0 评论