
编程练习
文章平均质量分 59
小小数据挖掘工程师
即将毕业小硕一枚,记录自己编程学习生涯!可以交个朋友吗?一起撸代码鸭!
展开
-
Leetcode栈系列之:1021.删除最外层括号
题目描述:有效括号字符串为空("")、"(" + A + ")"或A + B,其中A 和B都是有效的括号字符串,+代表字符串的连接。例如,"","()","(())()"和"(()(()))"都是有效的括号字符串。如果有效字符串S非空,且不存在将其拆分为S = A+B的方法,我们称其为原语(primitive),其中A 和B都是非空有效括号字符串。给出一个非空有效字符串S,考虑将其进行原语化分解,使得:S = P_1 + P_2 + ... + P_k,其中...原创 2021-03-20 23:33:17 · 106 阅读 · 0 评论 -
Leetcode栈系列之:1249.移除无效括号
题目描述:给你一个由 '('、')' 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 '(' 或者 ')'(可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下任意一条要求:空字符串或只包含小写字母的字符串可以被写作AB(A连接B)的字符串,其中A和B都是有效「括号字符串」可以被写作(A)的字符串,其中A是一个有效的「括号字符串」示例 1:输入:s = "lee(t(c)o...原创 2021-03-20 23:16:27 · 295 阅读 · 0 评论 -
Leetcode栈系列:633.函数的独占时间
题目描述:给出一个非抢占单线程CPU的 n 个函数运行日志,找到函数的独占时间。每个函数都有一个唯一的 Id,从 0 到 n-1,函数可能会递归调用或者被其他函数调用。日志是具有以下格式的字符串:function_id:start_or_end:timestamp。例如:"0:start:0"表示函数 0 从 0 时刻开始运行。"0:end:0"表示函数 0 在 0 时刻结束。函数的独占时间定义是在该方法中花费的时间,调用其他函数花费的时间不算该函数的独占时间。你需要根据函数的 Id...原创 2021-03-20 22:18:25 · 123 阅读 · 0 评论 -
Leetcode刷题之:969.煎饼排序
题目描述:给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序。一次煎饼翻转的执行过程如下:选择一个整数 k ,1 <= k <= arr.length反转子数组 arr[0...k-1](下标从 0 开始)例如,arr = [3,2,1,4] ,选择 k = 3 进行一次煎饼翻转,反转子数组 [3,2,1] ,得到 arr = [1,2,3,4] 。以数组形式返回能使 arr 有序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在10 * arr.l.原创 2021-03-14 21:22:45 · 302 阅读 · 0 评论 -
Leetcode刷题之:860.柠檬水找零
题目描述:在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回true,否则返回 false。示例 1:输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5...转载 2021-03-14 21:10:17 · 191 阅读 · 0 评论 -
Leetcode刷题之:859亲密字符串
题目描述:给定两个由小写字母构成的字符串A和B,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回true;否则返回 false 。交换字母的定义是取两个下标 i 和 j (下标从 0 开始),只要 i!=j 就交换 A[i] 和 A[j] 处的字符。例如,在 "abcd" 中交换下标 0 和下标 2 的元素可以生成 "cbad" 。示例 1:输入: A = "ab", B = "ba"输出: true解释: 你可以交换 A[0] = 'a' 和 A[...原创 2021-03-14 20:51:23 · 141 阅读 · 0 评论 -
Leetcode刷题之:933.最近的请求次数
题目描述:写一个RecentCounter类来计算特定时间范围内最近的请求。请你实现 RecentCounter 类:RecentCounter() 初始化计数器,请求数为 0 。int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。保证 每次对 ping 的调用都使用比之前更大的 t 值。示例:输入:["Rec...原创 2021-03-14 20:05:22 · 247 阅读 · 1 评论 -
Leetcode链表刷题之:138.复制带随机指针的链表
题目描述:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> ..原创 2021-03-13 20:44:28 · 164 阅读 · 0 评论 -
Leetcode链表刷题之:86.分隔链表
题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-list解题思路及代码:### 解题思路对于此题而言,只需要构建两个新链表,一个保存小于X的结点,一个保存大于X的结点,再将两个链表进行连接即可。需要注意的是:1.原创 2021-03-12 19:00:58 · 183 阅读 · 0 评论 -
Leetcode链表刷题之:82.删除排序链表中的重复元素
题目描述:给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。示例1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例2:输入: 1->1->1->2->3输出: 2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-...原创 2021-03-09 21:16:50 · 140 阅读 · 0 评论 -
Leetcode链表刷题之:83.删除排序链表中的重复元素
题目描述:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list解题思路及代码:### 解题思路题目给出的链表是排好序的链...原创 2021-03-09 17:26:17 · 90 阅读 · 0 评论 -
Leetcode链表刷题之:19.删除链表的倒数第N个结点
题目描述:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。解题思路及代码:### 解题思路删除倒数第N个结点,即删除正数第Len(链表) - N个结点 + 1个结点,设为M。1.考虑到可能原始链表只有一个结点,所以首先设置虚拟头结点;2.从虚拟头结点开始,正向前进M步,找到待删除链表的前一个结点;3.完成删除链表的操作p.next = p.next.next即可。### 代码```python# Definition for singly-linked li..原创 2021-03-09 16:45:54 · 179 阅读 · 0 评论 -
Leetcode链表刷题之:24.两两交换链表中的节点
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:ead = []输出:[]示例 3:输入:head = [1]输出:[1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs解题思路及代码:这道题目总体思.原创 2021-03-09 15:23:25 · 213 阅读 · 2 评论 -
Leetcode链表刷题之:61.旋转链表
题目描述:给定一个链表,旋转链表,将链表每个节点向右移动k个位置,其中k是非负数。示例1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例2:输入: 0->1-&g...原创 2021-03-06 21:38:50 · 283 阅读 · 0 评论 -
Leetcode链表刷题之:25.K个一组反转链表
题目描述:给你一个链表,每k个节点一组进行翻转,请你返回翻转后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-nodes-in-k-group解题思路及代码:# Definition for singly-linked list.# class ListNode(object):# ...原创 2021-03-06 21:10:46 · 132 阅读 · 0 评论 -
Leetcode链表刷题之:92.反转链表的中间一段
题目描述:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤m≤n≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list-ii解题思路与代码:### 解题思路...原创 2021-03-06 20:10:55 · 431 阅读 · 0 评论 -
Leetcode链表刷题之:206.反转链表
题目描述:反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list解法一:原地旋转### 解题思路原地旋转链表,可以构建两个指针,一个指向当前结点的前一.原创 2021-03-05 22:06:20 · 183 阅读 · 0 评论 -
Leetcode链表题之:202.快乐数
题目描述:编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为1,那么这个数就是快乐数。如果 n 是快乐数就返回 true ;不是,则返回 false 。示例 1:输入:19输出:true解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1示...原创 2021-03-05 14:01:12 · 153 阅读 · 0 评论 -
Leetcode链表题之:142环形链表的入环点
题目描述:给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle-ii解题思路及代码:...原创 2021-03-05 11:31:43 · 111 阅读 · 0 评论 -
Leetcode链表题之:141.环形链表
题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl原创 2021-03-05 09:24:25 · 133 阅读 · 1 评论 -
剑指offer 03 - 数组中重复的数字 - python解决
题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof解题思路:暴力法,用两个循环,遍历数组,.原创 2020-07-11 11:11:32 · 383 阅读 · 0 评论 -
面试题:一亿个数中选取TopN——python解决
题目描述:对10亿个数,取TOP-1000 (有限的内存和计算复杂度)解题思路: 数据量过大,考虑内存和计算复杂度的问题,不能选取直接对10亿个数据进行排序,再选取top100的数。采用构建堆的方法,再对剩下的数在现成的堆中进行比对,替换,直到遍历完所有数为止,找到Top100的堆,步骤如下:先取前N个数,构成小顶堆,即在内存中维护一个1000数的小顶堆 然后对文件中读取数据,和堆顶比较: if 比堆顶小,则丢弃 if 比堆顶大,替换根节点,并且调整堆,...原创 2020-06-26 20:32:34 · 1324 阅读 · 0 评论 -
删除链表中重复的结点(python解决)
题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路:因为重复的节点都要删除,因此需要标记重复开始前的上一个节点,又因为头结点有可能是重复的节点,为了操作方便,我们可以再链表前面设置一个空节点作为头结点...原创 2020-02-14 16:07:58 · 477 阅读 · 0 评论 -
用栈实现队列(python解决)
题目描述:解决代码:class MyQueue: def __init__(self): """ Initialize your data structure here. """ self.A = [] self.B = [] def push(self, x: int...原创 2020-02-13 21:36:43 · 307 阅读 · 0 评论 -
相交链表(python解决)
题目描述:解决方案:直接先遍历第一个链表,将值保存在一个字典中,再在第二个链表中寻找是否有相同的数即可/解决代码:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# self....原创 2020-02-13 17:25:29 · 580 阅读 · 0 评论 -
从尾到头打印链表(解决)
题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路:对链表进行遍历,每次遍历都将元素插入到待返回list的首位中。代码如下:# -*- coding:utf-8 -*-# class ListNode:# def __init__(self, x):# self.val = x# self.next...原创 2020-02-13 16:44:11 · 149 阅读 · 0 评论 -
实现strStr()——python解决
题目描述:解决代码如下:class Solution(object): def strStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ lh = len(ha...原创 2020-02-12 19:52:13 · 437 阅读 · 0 评论 -
X的平方根
题目描述:解决方案:二分法查找代码如下:class Solution(object): def mySqrt(self, x): """ :type x: int :rtype: int """ # 为了照顾到 0 把左边界设置为 0 left = 0 # 为了...原创 2020-02-10 22:28:30 · 183 阅读 · 0 评论 -
替换空格(python)
题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解法:直接使用python内置的replace函数,将空格替换成%20代码如下:# -*- coding:utf-8 -*-class Solution: # s 源字符串 def repla...原创 2020-02-08 16:50:43 · 241 阅读 · 0 评论 -
有序矩阵中的第K小的元素
题目描述:解决代码:class Solution(object): def kthSmallest(self, matrix, k): """ :type matrix: List[List[int]] :type k: int :rtype: int """ lis=[] ...原创 2020-02-07 18:54:05 · 146 阅读 · 0 评论 -
找到K个最接近的元素
题目描述:解决代码:class Solution(object): def findClosestElements(self, arr, k, x): """ :type arr: List[int] :type k: int :type x: int :rtype: List[int] ...原创 2020-02-07 18:33:39 · 226 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
题目描述:解决代码:class Solution(object): def searchRange(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ for ...原创 2020-02-06 19:24:13 · 128 阅读 · 0 评论 -
第一个只出现一次的字符(剑指offer python)
题目描述:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).解决思路:用一个字典保存字符串中每个字符出现的次数,再用一个遍历,找到第一个次数为1的字符,返回这个字符的位置即可。代码如下:# -*- coding:utf-8 -*-class Solution: ...原创 2020-02-06 16:52:21 · 168 阅读 · 0 评论 -
左旋转字符串(剑指offer)
题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路一:切片法直接使用pyhon中的切片方法,对序列进行重新拼接,达到题目的要求。...原创 2020-02-06 14:31:51 · 129 阅读 · 0 评论 -
最小覆盖子串(Leetcode困难题,python解决)
题目描述:解决思路:滑动窗口1. 初始,left指针和right指针都指向S的第一个元素. 2. 将 right指针右移,扩张窗口,直到得到一个可行窗口,亦即包含TT的全部字母的窗口。 3. 得到可行的窗口后,将left指针逐个右移,若得到的窗口依然可行,则更新最小窗口大小。 4. 若窗口不再可行,则跳转至 2。 代码实现如下:class Solution(...原创 2020-02-04 22:22:21 · 974 阅读 · 0 评论 -
找到字符串中所有字母异位词
题目描述:解题思路一:利用need来保存需要目标子串的所有字符出现次数 利用have来保存当前窗口下的子串的所有字符出现次数 match表示满足字符出现次数的数量 plen表示需要满足字符出现次数的数量 1. 移动right指针,当have[s[right]]==need[s[right]]时,match++ 2. 当match==plen且窗口大小等于所需字符数量...原创 2020-02-03 16:08:10 · 243 阅读 · 0 评论 -
长度最小的子数组(中等难度、python解决)
题目描述:给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。解决方案:双指针(O(n))代码如下:class Solution(ob...原创 2020-02-02 19:34:19 · 374 阅读 · 0 评论 -
Leetcode刷题之——前K个高频元素(中等难度)-python解决
题目描述:解决方案一:计数函数直接返回代码如下:class Solution(object): def topKFrequent(self, nums, k): """ :type nums: List[int] :type k: int :rtype: List[int] """ ...原创 2020-02-01 19:51:15 · 530 阅读 · 1 评论 -
Leetcode刷题之——数组中的第K个最大元素(python解决)
题目描述:解决方案1:找规律法题目描述的是,要找到数组中第K大的数,即该数组中,比找到的数要大的有K-1个,如果将数组按照由大到小的降序进行排列的话,只要输出第K个数就可以直接获得想要得到的数字。解决代码如下:class Solution(object): def findKthLargest(self, nums, k): """ :...原创 2020-02-01 16:32:42 · 2076 阅读 · 0 评论 -
Leetcode刷题之——两数之和||输入有序数组(python解决)
题目描述:解决方案一:将有序数组中的元素使用字典的形式进行表示,对于target减去数组中的元素值是否在数组的其他位置出现过进行以一比对,代码如下:class Solution(object): def twoSum(self, numbers, target): """ :type numbers: List[int] :...原创 2020-01-24 13:18:01 · 413 阅读 · 0 评论