面试题
剑圣土豆
Welcome
展开
-
设计:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
1、题目描述:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。【要求】1.pop、push、getMin操作的时间复杂度都是O(1)。2.设计的栈类型可以使用现成的栈结构。2、题解:方法1:思路1:设置两个栈,stackData保存正常的数据,辅助栈stackMin保存正常栈中的最小值(长度会<=正常栈的长度)push():两个栈都不用判断边界,stackDate无论什么情况下,都可以添加元素;对于stackMin辅助栈,如果为空,直接入栈否则,就判原创 2020-08-16 11:38:04 · 669 阅读 · 2 评论 -
双指针 | 辅助栈:力扣面试题 02.06. 回文链表
1、题目描述:2、题解:方法1:辅助栈思路:思路:设置一个栈,先把链表里的结点压到栈里然后从链表头部遍历:每次出栈,比较,遇到不等时,直接返回False最后都相等,返回True。Python代码:# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution原创 2020-08-14 20:58:29 · 123 阅读 · 0 评论 -
数组 模拟打印:之字打印矩阵
1、题目描述:【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12“之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12【要求】 额外空间复杂度为O(1)2、题解:思路:# 思路:对于A和B,A是先右,遇到边界向下;B是先下,遇到边界向右。然后设置fromUp表示从哪个方向打印Python代码如下:class Solution: def printMatrixZigZag(sel原创 2020-08-14 12:21:39 · 175 阅读 · 0 评论 -
数组:把矩阵原地顺时针旋转90°
1、题目描述:让矩阵顺时针旋转90°,空间复杂度为O(1)2、题解:做这个题之前可以先做做数组模拟打印:牛客-剑指offer系列题解–顺时针打印矩阵此题可以用空间复杂度O(N^2)做出来,也就是设置一个辅助数组res,然后遍历原数组,对于每一点有:res[j][n-i-1] = matrix[i][j],其中n为矩阵的长度。由于题目有空间复杂度的限制,只能在原数组中进行操作。思路:思路:由外圈向内圈,一圈一圈的旋转.当在一圈上旋转时,把相应位置的4个数交换即可。left,right,to原创 2020-08-14 10:43:31 · 846 阅读 · 0 评论 -
队列和栈(设计):用数组结构实现大小固定的队列和栈
1、问题描述:用数组结构实现大小固定的队列和栈数组的大小是固定的2、题解:思路:用数组实现栈(数组的大小一定),用一个指针index,指向数组的开头,push一个数就让nums[index] = num ,且让index + 1,直到index 等于数组的长度。(index是即将push进来的数的位置)pop出一个数,直接把index位置的数取出,然后index-1栈顶:nums[index - 1]用数组实现队列(数组的大小一定),用三个指针,pre,end,index,分别代表队原创 2020-08-13 18:47:36 · 127 阅读 · 0 评论 -
高频面试题(利用桶的思想):给定一个数组,求如果排序之后,相邻两数的最大差值
1、问题给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。2、题解:我们用桶来做,非基于比较的排序有三种:计数、桶、基数。思路:思路:有n个数,分n+1个桶(鸽笼原理:中间一定有个空桶。相邻两数的最大值一定在两个非空的桶中,不可能来自同一个桶)设置三个数组,分别装桶中的是否为空、最大值、最小值,然后遍历求出最大差值。步骤:步骤:1、先判断特例,数组为空或只有一个元素:返回02、遍历,求出最小值和最大值,如果相等,说明这个数组中的元素原创 2020-08-13 09:50:50 · 174 阅读 · 0 评论 -
归并排序的改版:处理数组的在前面的数小于当前的数的之和问题,也即小和问题
1、题目描述:2、题解:方法:归并排序思路:nums[p1]的右边有多少个大于它的数,如果有m个,则此时的和为 nums[p1] * m归并排序,我们找左边的小和,找右边的小和,然后合并的时候,找合并的小和,三者相加即可在合并时,几乎和归并排序的merge一样,唯一不同的是加了res:在左区间的数nums[p1]小于右区间的数nums[p2]时,此时在nums[p2]的右边的都会比nums[p1]大,因此统计小和为nums[p1] * (r- p2 + 1)。Python代码如下:cl原创 2020-08-06 22:48:05 · 176 阅读 · 0 评论 -
猿辅导笔试题:辅助栈 解压字符串
1、题目描述:猿辅导APP需要下发一些宣传文本给学生,工程师们使用了一种字符压缩算法,为简单起见,假设被压缩的字符全部为大写字母序列,A,B,C,D…Z,压缩规则如下: 1.AAAB可以压缩为A3B (单字符压缩不加括号) 2.ABABA可以压缩为(AB)2A (多字符串压缩才加括号)输入数据保证不会出现冗余括号,且表示重复的数字一定合法且大于1,即不会出现: 1.(A)2B ------- (应为:A2B) 2. ((AB))2C,-----(应为:(AB)2C )原创 2020-07-28 12:52:11 · 363 阅读 · 0 评论 -
vivo21届笔试题:手机跌落测试(与力扣的887. 鸡蛋掉落相同)
1、题目描述:此题与力扣的887. 鸡蛋掉落相同2、题解:动态规划原创 2020-06-12 19:24:11 · 462 阅读 · 0 评论 -
vivo21届笔试题:生产线整合
1、题目描述:对n 个有序数组,合并成为一个有序数组输入为:42 4 83 5 65 8 9 111 6 7 10 12输出为:1 2 3 4 4 5 6 6 7 8 8 9 10 11 122、题解:排序n = int(input())nums = []for j in range(n): nums.append([int(i) for i in input().split()])# print(nums)def solution(n,nums): def原创 2020-06-07 22:11:44 · 271 阅读 · 0 评论 -
vivo21届笔试题:vivo新工业园种花植树
1、题目描述:此题与力扣605种花问题 的变体问题改成能最多种多少多花?比如输入是51 0 0 0 0则输出为:22、题解:注意:需要自己处理输入输出n = int(input())nums = [int(i) for i in input().split()]def maxnum(n,nums): if n == 1 and nums[0] == 0: return 1 res = 0 pre,cur = 0,1 while cur原创 2020-06-07 22:04:21 · 234 阅读 · 0 评论 -
vivo 2020届校招 跳盒子,贪心算法
1、题目描述:2、题解:与力扣45题跳跃游戏Ⅱ类似,但要做改动贪心算法def solution(step_list): #// TODO Write your code here end ,maxPosition,step = 0,0,0 for i in range(len(step_list) - 1): if i <= maxPosition: maxPosition = max(maxPosition,i + st原创 2020-06-07 21:02:23 · 839 阅读 · 0 评论 -
vivo 2020届校招 报数
1、题目描述:2、题解:双端队列def solution(N, M): # TODO Write your code here # -*- coding:utf-8 -*- # write code here from collections import deque queue = deque(list(range(1,N + 1))) res = [] i = 0 while queue: i += 1原创 2020-06-07 15:47:52 · 142 阅读 · 0 评论 -
vivo2020届春季招聘 数位之积,提供两种解法
1、题目描述:现给定任意正整数 n,请寻找并输出最小的正整数 m(m>9),使得 m 的各位(个位、十位、百位 … …)之乘积等于n,若不存在则输出 -1。2、题解:class Solution: def solution(self, n): def search(n, temp): for i in range(9, 1, -1): res = n / i if n % i ==原创 2020-06-07 15:01:56 · 193 阅读 · 0 评论 -
vivo2020届春季招聘 智能手机产能,提供两种解法,轻松易懂
1、题目描述:在vivo产线上,每位职工随着对手机加工流程认识的熟悉和经验的增加,日产量也会不断攀升。 假设第一天量产1台,接下来2天(即第二、三天)每天量产2件,接下来3天(即第四、五、六天)每天量产3件 … … 以此类推,请编程计算出第n天总共可以量产的手机数量。2、题解:class Solution: def solution(self , n ): # write code here ans = 0 i = 1原创 2020-06-07 15:01:43 · 157 阅读 · 0 评论 -
美团面试题-输入一个值N,返回长度为N的数组array并满足一定要求
1、题目描述:2、题解:java:递归public class Code01_MakeNo { //生成长度为size的达标数组 //达标:对于任意的i<k<j,满足[i] + [j] != [k] * 2 public static int[] makeNo(int size) { if (size == 1) { return new int[] {1};...原创 2020-04-28 10:59:06 · 479 阅读 · 0 评论