![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔试题
七月听雪
这个作者很懒,什么都没留下…
展开
-
726. 原子的数量
带括号的题一般都可以用栈来解决,比如(A(BC)2)3,处理完BC乘以2之后,到达后面的括号),不光A乘以3,BC也得乘以3。所以在栈里里面括号的信息,要更新在外面括号的信息。在栈里需要一个容器保存原子的个数。class Solution(object): def countOfAtoms(self, formula): N = len(formula) ...原创 2020-03-22 20:05:08 · 232 阅读 · 0 评论 -
已知先序和中序求后序
先构造二叉树,之后在得出前序遍历的结果。class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = Noneclass Solution: # 返回构造的TreeNode根节点 def reConstructBina...原创 2020-03-22 16:42:44 · 594 阅读 · 0 评论 -
25. K 个一组翻转链表
其实就是用栈就可以解决,主要就是代码的细节。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def reverseKGroup(...原创 2020-03-21 07:23:10 · 79 阅读 · 0 评论 -
3. 无重复字符的最长子串
我第一个就是想到了动态规划,dp[ i ]代表以s[ i ]为结尾的不重复子串的最大长度。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if not s: return 0 if len(s)==1: ret...原创 2020-03-18 15:30:19 · 132 阅读 · 0 评论 -
222. 完全二叉树的节点个数
要求复杂度小于O(n),一提到复杂度小于O(n)就应该想到二分法。一开始想到的是对倒数第二行用二分法,但是要保存倒数第二行的结点需要层次遍历,复杂度是O(n)。所以就要从根结点开始每一层都用一次二分法,复杂度就是O(d**2) = O((logN)**2)。每一层的二分法的目的是找到最后一层的最后一个结点在目前这个结点的左子树还是右子树。# Definition for a bi...原创 2020-03-18 10:15:25 · 161 阅读 · 0 评论 -
搜狗2014年笔试题-两递增数组A和B,求A[i]+B[j]中前k个最小值
在上图中,加入找到最小的组合是12+9,那么接下来放进去的应该是12+10和13+9,哪为什么只放进去了12+10?这是因为,比13+9小的还有13+-5,13+-2,13+0,如果前面的13+0已经在堆里弹出去了,那么13+9已经在堆里了。如果13+0根本就没在堆里,那么13+9比13+0还要大就更不应该在堆里了。如果13+0在堆里,那么说明13+0不是目前最小的,那么13...原创 2020-03-14 15:43:05 · 193 阅读 · 0 评论 -
114. 二叉树展开为链表
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object):...原创 2020-03-13 14:40:08 · 89 阅读 · 0 评论 -
leetcode 132. 分割回文串 II
对于上图来说,整个字符串的切分次数就是两部分切分次数之和。dp[0:j]=dp[0:i-1]+dp[i:j] = dp[0:i-1]+1,由于i得再j以内得范围移动,所以要得到最小的dp[0:j]。class Solution: def minCut(self, s: str) -> int: min_cut = list(range(len(s)))...原创 2020-03-13 09:41:34 · 92 阅读 · 0 评论 -
几乎有序的数组排序_python
堆排序:import heapqdef f(a,k): h = [] for i in range(k): heapq.heappush(h,a[i]) for i in range(len(a)): a[i]=heapq.heappop(h) if i+k<len(a): he...原创 2020-03-11 21:08:26 · 388 阅读 · 0 评论 -
leetcode33. 搜索旋转排序数组 字节跳动笔试题
当时要求我的复杂度小于o(n),我就理解为不能用遍历,其实小于o(n)最直接的不就是o(logn)吗!还是查找的一道题,很容易就想到二分查找吗!!!这个题主要的难点就在于他是两个独立的单调的区间,所以区间边界的移动规则就得修改。在上图target落在左区的这种情况,首先小于target的数据,在左区间和右区间都有分布,所以如果mid<target,并不知道mi...原创 2020-02-23 17:07:20 · 175 阅读 · 0 评论 -
leetcode351 安卓系统手势解锁
注意:9 ——> 2没有经过任何点 要求2的意思是:手势里不能有重复的点class Solution: def numberOfPatterns(self, m: int, n: int) -> int: self.res = 0 all_set = set(range(1, 10)) ...原创 2020-02-19 18:23:38 · 1062 阅读 · 2 评论 -
leetcode 215. 数组中的第K个最大元素
堆排序:import heapqclass Solution(object): def findKthLargest(self, nums, k): """ :type nums: List[int] :type k: int :rtype: int """ count = 0...原创 2020-02-12 18:33:31 · 122 阅读 · 0 评论 -
55. 跳跃游戏 金睛云华笔试题
这个只要他能跳到最后一个位置之外他就能到达最后一个位置,这一点我想到了。但是我考虑的是把在中间过程中每次迭代能到达的位置都保存下来,以此基础再往下迭代。其实只要保存一个临时变量保存当前能到达的最远的那个位置,在这个位置前面他就能被跳到,如果能被跳到在这个位置基础上继续贪心算法去求新的最远位置。class Solution: def canJump(self, nums) ...原创 2019-12-17 20:54:40 · 292 阅读 · 0 评论 -
2020网易秋招笔试题——有条件的排序数组
给定n个数字,a1a2a3...an,你可以对这个数组执行任意次以下交换操作:对于数组中的两个下标i,j(1<=i.j<=n),如果ai+aj为奇数,那么就可以交换这两个数。现在允许我们的交换次数不限,求出能够通过若干次操作后得到的数组中字典序最小的一个example:(A) 输入 7 3 5 1 输出 7 3 5 1(B) 输入 53...原创 2019-08-28 18:15:16 · 631 阅读 · 1 评论 -
2020京东秋招笔试题1 && LeetCode768 最多能完成排序的块II
递归方法: 根据题目得要求,前面箱的最大值应该小于后面箱的最小值。可以用递归的方式,分一次之后得到两个箱,最这两个箱继续分,直到分不下去为止。class Solution(object): def maxChunksToSorted(self, arr): """ :type arr: List[int] :rty...原创 2019-08-25 20:04:42 · 259 阅读 · 0 评论 -
2020腾讯秋招笔试题1——解压缩字符串
题目:给你一个压缩字符串,让你进行解压缩,例如ABCABCABC会被压缩成[3|ABC]输入:压缩字符串([2|A[2|BC]])输出:解压后的字符串(ABCBCABCBC)思路:江湖传言 带括号的必用栈。假如从头开始看,找到A,能知道A加上后面的部分要重复两遍。但是后面的部分是怎么样的,并不知道。所以要从后面出栈。s = input()def unzip(s):...原创 2019-08-27 09:48:50 · 797 阅读 · 1 评论 -
2020字节跳动秋招笔试题——圆形花园的入口
小区花园里有n个入口,现在要修一些路,要求每个入口只能有一条路,且每条路之间互不相交,求输入为n的时候有几中修路的方式。n是一个输入为2-1000的偶数。也就是偶数个圆上的点画不相交的直线有多少种画法。首先要找到dp[ i ]和之前的dp之间的关系。换句话说怎么用之前的信息推出现在的修路条数。以n = 8为例,之前的n = 6,4,2,0的情况都已经知道了。8是在6的基础上添加...原创 2019-08-26 19:37:35 · 566 阅读 · 1 评论