2023/8/29 B站开发工程师(工程效率方向)笔试编程题
Python代码实现
1.排序去重
给定一个升序排列的的长度为 n 的数组 nums,数组中每个元素都是正整数,
请删除一部分这个数组的重复元素(数组元素需要原地改变),
让这个数组中的每个数字都严格大于前一个数(第一个数除外),
然后返回删除过后该数组的长度。
假设你返回长度是 m。如果 m 是正确答案,修改后的数组 nums 有 m 或 m 个以上个元素,并且前 m 个元素符合要求,那么你的代码将被判为正确。
例如n=4,nums=[1,2,2,3],则输出3。
例如n=5,nums=[1,1,22,30,41],则输出4。
class Solution: def del_repeat_item(self, n: int, nums) -> int: for i in range(n - 1, 0, -1): if nums[i] <= nums[i - 1]: nums.pop(i) return len(nums) ret = Solution().del_repeat_item(4, [1, 2, 2, 3]) print(ret)
2.蛇形矩阵
编写算法, 将自然数 1~n^2 按“ 蛇形” 填入 n× n 矩阵中。例如n=4时,自然数1~4^2 填入4 x 4矩阵后:
1 12 11 10
2 13 16 9
3 14 15 8
4 5 6 7
class Solution: def print_snake_matrix(self, n: int): # 创建一个空的 n x n 矩阵 matrix = [[0] * n for _ in range(n)] # 最大值 max_num = n ** 2 # 当前值 matrix[0][0] = temp_num = 1 i = j = 0 # 值未填满 while temp_num < max_num: # 下 while i + 1 < n and matrix[i + 1][j] == 0: i += 1 temp_num += 1 matrix[i][j] = temp_num # 右 while j + 1 < n and matrix[i][j + 1] == 0: j += 1 temp_num += 1 matrix[i][j] = temp_num # 上 while 0 <= i - 1 < n and matrix[i - 1][j] == 0: i -= 1 temp_num += 1 matrix[i][j] = temp_num # 左 while 0 <= j - 1 < n and matrix[i][j - 1] == 0: j -= 1 temp_num += 1 matrix[i][j] = temp_num # print(i, j) # print(temp_num, max_num) return matrix ret = Solution().print_snake_matrix(4) print(ret)
3.平均数最大长度为K的连续子数组
给定一个长度为n的数组,数组中每个元素都是整数,找到其中平均数最大的长度为k连续子数组。请你输出该子数组所有元素的平均数。
例如输入n=4,k=2,数组为[1,2,3,1],则输出2.50。
注意:遇到不符合预期的输入时,返回0.00。
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入4,2,[1,2,3,1]
输出2.50
class Solution: def cal_max_avg_for_sub_list(self, n, k, nums) -> float: # 前k个数字和 temp_sum = max_sum = sum(nums[:k]) # 循环拿 k至最后一个数字 for i in range(k, n): # 减去的是最左边的 temp_sum += nums[i] - nums[i - k] max_sum = max(max_sum, temp_sum) return max_sum / k ret = Solution().cal_max_avg_for_sub_list(4, 2, [1, 2, 3, 1]) print(ret)