面试题
小小数据挖掘工程师
即将毕业小硕一枚,记录自己编程学习生涯!可以交个朋友吗?一起撸代码鸭!
展开
-
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 · 82 阅读 · 0 评论 -
Leetcode栈系列之:1249.移除无效括号
题目描述:给你一个由 '('、')' 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 '(' 或者 ')'(可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下任意一条要求:空字符串或只包含小写字母的字符串可以被写作AB(A连接B)的字符串,其中A和B都是有效「括号字符串」可以被写作(A)的字符串,其中A是一个有效的「括号字符串」示例 1:输入:s = "lee(t(c)o...原创 2021-03-20 23:16:27 · 222 阅读 · 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 · 78 阅读 · 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 · 245 阅读 · 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 · 147 阅读 · 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 · 94 阅读 · 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 · 175 阅读 · 1 评论 -
Leetcode链表刷题之:138.复制带随机指针的链表
题目描述:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。例如,如果原链表中有 X 和 Y 两个节点,其中 X.random --> ..原创 2021-03-13 20:44:28 · 126 阅读 · 0 评论 -
Leetcode链表刷题之:86.分隔链表
题目描述:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/partition-list解题思路及代码:### 解题思路对于此题而言,只需要构建两个新链表,一个保存小于X的结点,一个保存大于X的结点,再将两个链表进行连接即可。需要注意的是:1.原创 2021-03-12 19:00:58 · 123 阅读 · 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 · 118 阅读 · 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 · 63 阅读 · 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 · 122 阅读 · 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 · 134 阅读 · 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 · 164 阅读 · 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 · 99 阅读 · 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 · 365 阅读 · 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 · 100 阅读 · 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 · 124 阅读 · 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 · 70 阅读 · 0 评论 -
Leetcode链表题之:141.环形链表
题目描述:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)链接:https://leetcode-cn.com/probl原创 2021-03-05 09:24:25 · 99 阅读 · 1 评论 -
剑指offer-二叉树的镜像
题目描述:请完成一个函数,输入一个二叉树,该函数输出它的镜像,即交换树的所有左右子节点。解决方案:辅助栈使用栈的数据结构来辅助树进行镜像的完成首先在栈中加入根节点(节点为空,返回Null),将节点出栈其次,将节点的左右子节点入栈然后,将左右节点交换依次循环以上步骤,直到栈空时,退出,返回根节点(镜像完成)解决代码如下:# Definition for a binary tree node.# class TreeNode(object):# def __init__(se原创 2021-02-03 16:41:33 · 47 阅读 · 0 评论 -
面试题:从多层嵌套的list中取出单个元素
假设有一个多层嵌套的list:[ 1, [2, 3], 4, [5, 6, 7]],从中取出单个元素,组成一个新的list。解题思路:很明显,采用递归的方法,在一个遍历原始list的for循环中,判断该遍历的是元素还是list,如果是元素则直接append,如果是list则调用函数进行递归。代码如下:result = []def solve_list(list): for s in list: if type(s) != list: result.append(s) else:原创 2021-02-03 16:37:10 · 1786 阅读 · 0 评论 -
面试题:合并递增链表并保持递增
题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解决代码:# Definition for singly-linked list.# class ListNode(object):# def __init__(self, x):# self.val = x# se原创 2020-08-17 16:23:30 · 145 阅读 · 0 评论 -
面试题:反转链表并输出头结点
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路:建立两个节点,前向与当前节点,前向节点初始化为None,当前节点初始化为头节点;接着遍历原链表,将链表的指针指向进行调换,直到遍历完整个原链表,指针顺序调换完成。解决代码:# Definition for singly-link原创 2020-08-17 15:48:27 · 335 阅读 · 0 评论 -
面试题:找到链表中的倒数第K个节点
题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解题思路:采用双指针的方法:首先,前向指针、后向指针都初始化为head节点,之后前向指针往前走K步,保持对后向指针的领先原创 2020-08-17 14:12:59 · 155 阅读 · 0 评论 -
剑指offer21-调整数组顺序使得奇书位于偶数前面
题目描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。示例:输入:nums =[1,2,3,4]输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。解题思路:按照头尾索引的方法,从左到右索引,查看是否有偶数,从右到左索引,查看是否有奇数,如果查看到了偶数与奇数,则两两交换位置,直到头尾索引的index相遇,则按要求划分完成。解决代码:class Solution(object):.原创 2020-08-17 13:34:12 · 106 阅读 · 0 评论 -
剑指offer18-删除链表的节点(python解决)
题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表原创 2020-08-14 09:44:06 · 235 阅读 · 2 评论 -
剑指offer16中等难度-数值的整数次方(python解决)
题目描述:实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解决思路:根据二进制的特点,将n转换成二进制,x的n次方,即为x的多个二进制的为1的位数上的次方的和。算法步骤如下: 当 x = 0x=0 时:直接返回 0(避免后续 x = 1 / xx=1/x 操作报错) 初始化 res = 1 当 n < 0 时:把问题转化至 n≥0 的范围内,即执行 x原创 2020-08-13 11:39:37 · 124 阅读 · 0 评论 -
剑指offer-15:二进制中的1的个数(python解决)
题目描述:请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。解题思路:采用与运算,判断二进制的位数是否为一,n&1 = 1,最后一位则为1,否则则为0。故采用循环进行判断,n&1=1则计数加一,最后返回计数值,则可解决问题。解决代码:class Solution(object): def hammingWeight(self, n): "原创 2020-08-13 11:19:04 · 151 阅读 · 0 评论 -
面试题:一亿个数中选取TopN——python解决
题目描述:对10亿个数,取TOP-1000 (有限的内存和计算复杂度)解题思路: 数据量过大,考虑内存和计算复杂度的问题,不能选取直接对10亿个数据进行排序,再选取top100的数。采用构建堆的方法,再对剩下的数在现成的堆中进行比对,替换,直到遍历完所有数为止,找到Top100的堆,步骤如下:先取前N个数,构成小顶堆,即在内存中维护一个1000数的小顶堆 然后对文件中读取数据,和堆顶比较: if 比堆顶小,则丢弃 if 比堆顶大,替换根节点,并且调整堆,...原创 2020-06-26 20:32:34 · 1263 阅读 · 0 评论