📅  最后修改于: 2023-12-03 15:28:12.870000             🧑  作者: Mango
本次面试针对的是软件工程实习生,谷歌要求应聘者拥有扎实的编程基础、对数据结构和算法有深入理解,并且要求应聘者对软件工程有基本的了解。以下是本次面试的流程和参考答案,希望对准备谷歌实习面试的程序员有所帮助。
第一轮面试主要是关于数据结构、算法和编程语言的问题。
第二轮面试是一道较难的编程题,需要应聘者在45分钟内完成。
题目:给定一个整数数组,其中每一项的值代表相应下标元素需要移动的距离,正数表示向右移动,负数表示向左移动。要求编写程序输出按照指定顺序移动后的数组。例如,给定数组[1, -2, 3, -4, 5, -6, 7, -8, 9],移动顺序为[2, 4, 1, -3],则输出为[5, -6, 9, -2, 1, -4, 3, -8, 7]。
第三轮面试主要是关于软件工程的问题。
第四轮面试是谷歌的技术领袖面试,主要是考察应聘者对软件工程的深度理解和对未来技术的前瞻性思考。
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
dummy = ListNode(0)
dummy.next = head
p1 = dummy
p2 = dummy
for i in range(n):
p2 = p2.next
while p2.next != None:
p1 = p1.next
p2 = p2.next
p1.next = p1.next.next
return dummy.next
题解:
def move_array(nums, order):
if len(nums) == 0:
return []
n = len(nums)
max_idx = 0
for i in range(n):
if nums[i] > nums[max_idx]:
max_idx = i
for i in range(len(order)):
if order[i] > 0:
nums[max_idx: max_idx - order[i]: -1], nums[max_idx - order[i] + 1:max_idx + 1: 1] = nums[max_idx - order[i] + 1:max_idx + 1: 1], nums[max_idx: max_idx - order[i]: -1]
else:
nums[max_idx: max_idx + abs(order[i]) + 1: 1], nums[max_idx + abs(order[i]): max_idx + 1: -1] = nums[max_idx + abs(order[i]): max_idx + 1: -1], nums[max_idx: max_idx + abs(order[i]) + 1: 1]
max_idx += abs(order[i])
return nums