在软件开发岗的笔试中,算法题通常涉及数据处理、逻辑优化、动态规划、图算法等方向。以下是一些常见的算法题类型及其伪代码实现示例:
1. 字符串处理
题目示例:实现字符串反转或判断回文。
FUNCTION reverseString(s: STRING) -> STRING:
left = 0
right = length(s) - 1
WHILE left < right:
SWAP(s[left], s[right])
left = left + 1
right = right - 1
RETURN s
FUNCTION isPalindrome(s: STRING) -> BOOLEAN:
reversed = reverseString(s)
RETURN s == reversed
2. 数组与排序
题目示例:实现快速排序或查找数组中的最大值。
FUNCTION quickSort(arr: ARRAY, low: INT, high: INT):
IF low < high:
pivotIndex = partition(arr, low, high)
quickSort(arr, low, pivotIndex - 1)
quickSort(arr, pivotIndex + 1, high)
FUNCTION partition(arr: ARRAY, low: INT, high: INT) -> INT:
pivot = arr[high]
i = low - 1
FOR j = low TO high - 1:
IF arr[j] < pivot:
i = i + 1
SWAP(arr[i], arr[j])
SWAP(arr[i + 1], arr[high])
RETURN i + 1
3. 动态规划
题目示例:求解最长公共子序列(LCS)。
FUNCTION LCS(s1: STRING, s2: STRING) -> STRING:
m = length(s1)
n = length(s2)
dp = ARRAY[m+1][n+1] INITIALIZED TO 0
FOR i = 1 TO m:
FOR j = 1 TO 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])
RETURN dp[m][n]
4. 图算法
题目示例:实现Dijkstra算法求解最短路径。
FUNCTION Dijkstra(graph: GRAPH, start: NODE):
dist = ARRAY[graph.size] INITIALIZED TO INFINITY
dist[start] = 0
visited = SET()
WHILE visited.size < graph.size:
u = NODE WITH MINIMUM dist[] NOT IN visited
visited.add(u)
FOR EACH NEIGHBOR v OF u:
IF dist[u] + graph[u][v] < dist[v]:
dist[v] = dist[u] + graph[u][v]
RETURN dist
5. 数学问题
题目示例:判断一个数是否为质数。
FUNCTION isPrime(n: INT) -> BOOLEAN:
IF n <= 1:
RETURN FALSE
FOR i = 2 TO SQRT(n):
IF n % i == 0:
RETURN FALSE
RETURN TRUE
6. 链表操作
题目示例:反转链表。
FUNCTION reverseList(head: NODE) -> NODE:
prev = NULL
curr = head
WHILE curr != NULL:
next = curr.next
curr.next = prev
prev = curr
curr = next
RETURN prev
7. 贪心算法
题目示例:找零钱问题。
FUNCTION coinChange(coins: ARRAY, amount: INT) -> INT:
coins = SORT(coins, DESCENDING)
count = 0
FOR EACH coin IN coins:
WHILE amount >= coin:
amount = amount - coin
count = count + 1
IF amount == 0:
RETURN count
ELSE:
RETURN -1
8. 递归与回溯
题目示例:求解全排列。
FUNCTION permute(nums: ARRAY) -> ARRAY[ARRAY]:
result = ARRAY[ARRAY]()
backtrack(nums, result, 0)
RETURN result
FUNCTION backtrack(nums: ARRAY, result: ARRAY[ARRAY], start: INT):
IF start == length(nums):
result.add(nums.copy())
RETURN
FOR i = start TO length(nums) - 1:
SWAP(nums[start], nums[i])
backtrack(nums, result, start + 1)
SWAP(nums[start], nums[i])
9. 滑动窗口
题目示例:求解最长无重复字符子串。
FUNCTION lengthOfLongestSubstring(s: STRING) -> INT:
charSet = SET()
left = 0
maxLen = 0
FOR right = 0 TO length(s) - 1:
WHILE s[right] IN charSet:
charSet.remove(s[left])
left = left + 1
charSet.add(s[right])
maxLen = MAX(maxLen, right - left + 1)
RETURN maxLen
10. 位运算
题目示例:统计二进制中1的个数。
FUNCTION countBits(n: INT) -> INT:
count = 0
WHILE n > 0:
count = count + (n & 1)
n = n >> 1
RETURN count
总结
- 银行软件开发岗的算法题通常注重逻辑清晰、代码简洁和效率优化。
- 伪代码的关键是清晰地表达算法思路,避免语法细节。
- 建议熟悉常见算法模板(如动态规划、回溯、滑动窗口等),并多做练习以提升解题速度。