当前位置:实例文章 » JAVA Web实例» [文章]牛客网:华为机试刷题记录

牛客网:华为机试刷题记录

发布人:shili8 发布时间:2025-01-30 16:44 阅读次数:0

**华为机试刷题记录**

作为一名正在努力提升编程能力的程序员,我决定在牛客网上进行华为机试刷题。以下是我的刷题记录,包括部分代码示例和注释。

**第一题:最长公共子序列**

题目描述:给定两个字符串 `s1` 和 `s2`,找到它们的最长公共子序列(LCS)。

def longest_common_subsequence(s1, s2):
 m = len(s1) +1 n = len(s2) +1 # 创建一个二维数组来存储每个子问题的结果 dp = [[0] * n for _ in range(m)]
 # 初始化第一行和第一列 for i in range(1, m):
 dp[i][0] =0 for j in range(1, n):
 dp[0][j] =0 # 填充二维数组 for i in range(1, m):
 for j in range(1, n):
 if s1[i -1] == s2[j -1]:
 dp[i][j] = dp[i -1][j -1] +1 else:
 dp[i][j] = max(dp[i -1][j], dp[i][j -1])
 # 回溯找到LCS lcs = []
 i, j = m -1, n -1 while i >0 and j >0:
 if s1[i -1] == s2[j -1]:
 lcs.append(s1[i -1])
 i -=1 j -=1 elif dp[i -1][j] > dp[i][j -1]:
 i -=1 else:
 j -=1 return ''.join(reversed(lcs))


**第二题:最小生成树**

题目描述:给定一个带权图,找到其最小生成树。

import networkx as nxdef minimum_spanning_tree(graph):
 # 使用Prim算法找到最小生成树 mst = nx.minimum_spanning_tree(graph)
 return mst.edges()


**第三题:滑动窗口**

题目描述:给定一个数组和一个窗口大小,求出所有可能的滑动窗口。

def sliding_window(arr, window_size):
 # 使用列表推导式生成所有可能的滑动窗口 windows = [arr[i:i + window_size] for i in range(len(arr) - window_size +1)]
 return windows


**第四题:二分查找**

题目描述:给定一个有序数组和一个目标值,使用二分查找找到其索引。

def binary_search(arr, target):
 # 使用二分查找算法找到目标值的索引 left, right =0, len(arr) -1 while left <= right:
 mid = (left + right) //2 if arr[mid] == target:
 return mid elif arr[mid] < target:
 left = mid +1 else:
 right = mid -1 return -1


**第五题:回文链表**

题目描述:给定一个单链表,判断是否为回文链表。

class ListNode:
 def __init__(self, x):
 self.val = x self.next = Nonedef is_palindrome(head):
 # 使用快慢指针找到链表的中点 slow, fast = head, head while fast and fast.next:
 slow = slow.next fast = fast.next.next # 将后半段反转 prev = None while slow:
 next_node = slow.next slow.next = prev prev = slow slow = next_node # 比较前后两半是否相等 p1, p2 = head, prev while p2:
 if p1.val != p2.val:
 return False p1 = p1.next p2 = p2.next return True


以上是我的华为机试刷题记录,包括部分代码示例和注释。希望这些代码能够帮助你更好地理解编程概念,并且能够在实际项目中应用这些知识。

相关标签:java开发语言
其他信息

其他资源

Top