引言
编程难题不仅能够锻炼你的逻辑思维和问题解决能力,还能让你的编码技能得到提升。本文将为你介绍10个趣味编程挑战,帮助你轻松提升编码思维,享受解决问题的乐趣。
1. 两数之和
题目描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
def two_sum(nums, target):
for i in range(len(nums)):
for j in range(i+1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
2. 翻转字符串里的单词
题目描述:给定一个字符串,返回一个翻转顺序后每个单词的字符串,单词之间由一个空格分隔。
def reverse_words(s):
words = s.split()
return ' '.join(reversed(words))
3. 移除链表元素
题目描述:给定一个排序链表,删除所有重复的元素,使之每个元素只出现一次。
def remove_duplicates(head):
current = head
while current and current.next:
if current.val == current.next.val:
current.next = current.next.next
else:
current = current.next
return head
4. 字母异位词分组
题目描述:给定一个字符串,将所有异位词分组。
def group_anagrams(s):
anagrams = {}
for word in s:
sorted_word = ''.join(sorted(word))
if sorted_word not in anagrams:
anagrams[sorted_word] = [word]
else:
anagrams[sorted_word].append(word)
return list(anagrams.values())
5. 合并区间
题目描述:给定一个区间的集合,请合并所有重叠的区间。
def merge(intervals):
if not intervals:
return []
intervals.sort(key=lambda x: x[0])
merged = [intervals[0]]
for interval in intervals[1:]:
if merged[-1][1] >= interval[0]:
merged[-1][1] = max(merged[-1][1], interval[1])
else:
merged.append(interval)
return merged
6. 旋转图像
题目描述:给定一个 n×n 的二维矩阵,将矩阵沿主对角线旋转 90 度。
def rotate(matrix):
n = len(matrix)
for i in range(n):
for j in range(i, n-i-1):
matrix[i][j], matrix[j][n-i-1] = matrix[j][n-i-1], matrix[i][j]
matrix[i][n-i-1], matrix[n-i-1][j] = matrix[n-i-1][j], matrix[i][n-i-1]
7. 最长无重复子串
题目描述:给定一个字符串,找出最长的无重复子串的长度。
def length_of_longest_substring(s):
start, max_len = 0, 0
char_map = {}
for end in range(len(s)):
if s[end] in char_map:
start = max(start, char_map[s[end]] + 1)
char_map[s[end]] = end
max_len = max(max_len, end - start + 1)
return max_len
8. 有效的括号
题目描述:给定一个字符串,判断其是否为有效的括号序列。
def isValid(s):
stack = []
brackets = {'(': ')', '[': ']', '{': '}'}
for char in s:
if char in brackets:
stack.append(char)
elif not stack or brackets[stack.pop()] != char:
return False
return not stack
9. 合并K个排序链表
题目描述:给定K个排序链表,合并为一个新的排序链表。
def mergeKLists(lists):
if not lists:
return None
while len(lists) > 1:
merged = []
for i in range(0, len(lists), 2):
l1 = lists[i]
l2 = lists[i+1] if i+1 < len(lists) else None
merged.append(merge_two_lists(l1, l2))
lists = merged
return lists[0]
10. 最小栈
题目描述:设计一个支持 push、pop、top 操作,并能在常数时间内检索到最小元素的栈。
class MinStack:
def __init__(self):
self.stack = []
self.min_stack = []
def push(self, val: int) -> None:
self.stack.append(val)
if not self.min_stack or val <= self.min_stack[-1]:
self.min_stack.append(val)
def pop(self) -> None:
if self.stack.pop() == self.min_stack[-1]:
self.min_stack.pop()
def top(self) -> int:
return self.stack[-1]
def getMin(self) -> int:
return self.min_stack[-1]
总结
通过以上10个趣味编程挑战,相信你的编码思维和技能一定会有所提升。不断挑战自己,享受编程的乐趣吧!