首页 > 其他分享 >谷歌(Google)技术面试——在线评估问题(一)

谷歌(Google)技术面试——在线评估问题(一)

时间:2024-04-04 09:01:27浏览次数:25  
标签:bulbs 叠加 Google 示例 谷歌 days 灯泡 面试 right

谷歌(Google)面试过程的第一步,你可能会收到一个在线评估链接。 评估有效期为 7 天,包含两个编码问题,需要在一小时内完成。 以下是一些供你练习的在线评估问题

在本章结尾处,还提供了有关 Google 面试不同阶段的更多详细信息。

重复叠加字符串匹配

给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。

注意:字符串 “abc” 重复叠加 0 次是 “”,重复叠加 1 次是 “abc”,重复叠加 2 次是 “abcabc”。

示例 1

输入:a = “abcd”, b = “cdabcdab”
输出:3
解释:a 重复叠加三遍后为 “abcdabcdabcd”, 此时 b是其子串。

示例 2

输入:a = “a”, b = “aa”
输出:2

示例 3

输入:a = “a”, b = “a”
输出:1

示例 4

输入:a = “abc”, b = “wxyz”
输出:-1

提示

  • 1 <= a.length <= 104
  • 1 <= b.length <= 104
  • a 和 b 由小写英文字母组成

我们可以通过模拟的方式来解决这个问题。具体来说,可以不断叠加字符串 a 直到 b 成为叠加后的字符串 a 的子串,或者叠加次数达到一定的限制。

示例代码

def repeatedStringMatch(a, b):
    n = len(b) // len(a) + 2 # 计算叠加次数的上限
    for i in range(1, n + 1):
        if b in a * i:
            return i
    return -1

# 示例 1
a = "abcd"
b = "cdabcdab"
print(repeatedStringMatch(a, b)) # 输出:3

# 示例 2
a = "a"
b = "aa"
print(repeatedStringMatch(a, b)) # 输出:2

# 示例 3
a = "a"
b = "a"
print(repeatedStringMatch(a, b)) # 输出:1

# 示例 4
a = "abc"
b = "wxyz"
print(repeatedStringMatch(a, b)) # 输出:-1

这个函数首先计算叠加次数的上限 n,然后在循环中,依次尝试叠加 1 到 n 次字符串 a,检查叠加后的字符串是否包含 b,如果包含,则返回当前叠加次数。如果循环结束后仍然没有找到符合条件的叠加次数,则返回 -1。

K 个空花盆

n 个灯泡排成一行,编号从 1 到 n 。最初,所有灯泡都关闭。每天 只打开一个 灯泡,直到 n 天后所有灯泡都打开。

给你一个长度为 n 的灯泡数组 blubs ,其中 bulbs[i] = x 意味着在第 (i+1) 天,我们会把在位置 x 的灯泡打开,其中 i 从 0 开始,x 从 1 开始。

给你一个整数 k ,请返回恰好有两个打开的灯泡,且它们中间 正好 有 k 个 全部关闭的 灯泡的 最小的天数 。如果不存在这种情况,返回 -1 。

示例 1

输入: bulbs = [1,3,2],k = 1
输出:2
解释
第一天 bulbs[0] = 1,打开第一个灯泡 [1,0,0]
第二天 bulbs[1] = 3,打开第三个灯泡 [1,0,1]
第三天 bulbs[2] = 2,打开第二个灯泡 [1,1,1]
返回2,因为在第二天,两个打开的灯泡之间恰好有一个关闭的灯泡。

示例 2

输入:bulbs = [1,2,3],k = 1
输出:-1

提示

  • n == bulbs.length
  • 1 <= n <= 2 * 104
  • 1 <= bulbs[i] <= n
  • bulbs 是一个由从 1到 n 的数字构成的排列
  • 0 <= k <= 2 * 104

我们可以通过模拟的方式来解决这个问题。具体来说,我们可以遍历数组 bulbs,记录每个灯泡打开的位置,然后查找其中间有 k 个全部关闭的最小天数。

示例代码

def kEmptySlots(bulbs, k):
    n = len(bulbs)
    days = [0] * n # 记录每个位置上灯泡打开的天数
    for i in range(n):
        days[bulbs[i] - 1] = i + 1 # 记录每个灯泡的打开天数
    
    left, right = 0, k + 1
    min_days = float('inf')
    
    # 循环查找最小天数
    while right < n:
        for i in range(left + 1, right):
            if days[i] < days[left] or days[i] < days[right]:
                left, right = i, i + k + 1
                break
        else:
            min_days = min(min_days, max(days[left], days[right]))
            left, right = right, right + k + 1
    
    return min_days if min_days != float('inf') else -1

# 示例 1
bulbs1 = [1,3,2]
k1 = 1
print(kEmptySlots(bulbs1, k1)) # 输出:2

# 示例 2
bulbs2 = [1,2,3]
k2 = 1
print(kEmptySlots(bulbs2, k2)) # 输出:-1

这个函数首先遍历数组 bulbs,记录每个灯泡打开的天数,并初始化左右指针。然后在循环中,遍历数组找到两个灯泡之间有 k 个全部关闭的情况,更新左右指针。如果找到了这样的情况,则更新最小天数;否则继续查找。最后返回最小天数,如果不存在这样的情况,则返回 -1。

标签:bulbs,叠加,Google,示例,谷歌,days,灯泡,面试,right
From: https://blog.csdn.net/SmiledrinkCat/article/details/137288238

相关文章

  • 常见面试题--动态规划介绍(附C++源码实现)
    关注我,持续分享逻辑思维&管理思维;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。【图解《程序员面试常见的十大算法......
  • Java最短路径算法知识点(含面试大厂题和源码)
    最短路径算法是计算机科学和图论中的核心问题之一,它旨在找到从一个顶点到另一个顶点或在所有顶点之间的最短路径。这个问题在多种实际应用中都非常重要,如网络路由、交通规划、社交网络分析等。以下是一些与最短路径算法相关的知识点:Dijkstra算法:由荷兰计算机科学家艾兹......
  • Java归并排序知识点(含面试大厂题和源码)
    归并排序是一种有效的排序算法,采用分治法(DivideandConquer)策略。它将数组分成两半,对每一半递归地进行排序,然后将两个有序的半部分合并成一个整体的有序数组。归并排序在最坏情况、平均情况和最好情况下都保持(O(n\logn))的时间复杂度,是一种稳定的排序算法。由于其分而治......
  • Java快速排序知识点(含面试大厂题含源码)
    快速排序是一种高效的排序算法,由C.A.R.Hoare在1960年提出。它的基本思想是分而治之(DivideandConquer)。快速排序的关键在于选取一个“基准值”(pivot),然后将数组分为两个子数组:一个包含所有小于基准值的元素,另一个包含所有大于基准值的元素。这个过程称为“分区”(partitio......
  • Java后端新手的第一次面试复盘
    昨天经历了第一次Java后端实习生面试,在无数次的简历投递后,很难得的一次面试机会,收获很多,也深刻感受到自己能力的不足(还需要继续沉淀半个学期),在此记录下收获和感悟,如有错误,欢迎指正!1.面试流程闲聊(5分钟):自我介绍+询问背景动机技术问答(45分钟):包括Java基础、数据库技......
  • 面试题总结综合
    煞笔!终究转移到这是吗?1.自我介绍你好我叫杨凯23年毕业于河北工业大学211计算机科学与技术专业这次应聘的是贵公司测试工程师的(Java后端研发工程师的)岗位大学期间参加过创新创业大赛以及acm的培训(有两年的开发经验,其中一年在实习)做过的项目有实习时做的接口管理......
  • 面试常问问题——关于常用sql查询语句
    1、select--第一种select*from表名称--第二种select列名称from表名称2、select DISTINCT 去重SELECTDISTINCT列名称FROM表名称3、where子句1--第一种2SELECT列名称FROM表名称WHERE列运算符值34--第二种5SELECT*FROM表名称WHER......
  • 【Redis】.Net Core 面试破冰
    目录1.Redis简介2.使用场景3.C#具体使用介绍(Nuget)StackExchange.RedisFreeRedisNewLife.RedisServiceStack.Redis(收费)4.Redis常用面试问题以及回答5.建议及经验分享建议Redis经验分享ShareFlow1.Redis简介Redis是一个开源的使用ANSIC语言编写、遵守BSD协议、支持......
  • http前端面试题
    http状态码状态码分类1xx服务器收到请求2xx成功3xx重定向4xx客户端错误5xx服务器错误常见状态码http协议中的状态码有很多,但只有一些是我们常用的。也是面试常考的。200成功301永久重定向(同时返回一个location,写明重定向的url)。例如一个网站的网址永久性的切换......
  • ( —基础— ) k8s----介绍(1),2024年这些高频面试知识点最后再发一次
    kubectldashboard部署工具:使用批量部署工具如(ansible/saltstack)、手动二进制、apt-get/yum等方式安装,以守护进程的方式启动在宿主机上,类似于是Nginx一样使用service脚本启动。master,node作用Master:是集群的网关和中枢枢纽,主要作用:暴露API接口,跟踪其他服务器......