欢迎踏上Python算法之旅!🚀
在编程世界中,Python如同一把瑞士军刀🔧——简洁、强大且无所不能。作为当今最热门的语言之一,Python凭借其清晰的语法、丰富的库(如NumPy、Pandas)和广泛的应用领域(数据分析、AI、Web开发),成为初学者和专业开发者的共同选择。
✨ 为什么练习算法如此重要?
-
思维健身房🧠
算法题是逻辑思维的“杠铃”。通过拆解问题、设计步骤、优化代码,你的问题解决能力会指数级提升。 -
面试通行证📄
无论是大厂面试还是竞赛,算法都是核心考察点。扎实的算法基础=50%的Offer成功率! -
代码效率革命⏱️
告别O(n²)
的暴力循环!算法教你用更少资源做更多事,写出优雅高效的代码。 -
理解计算机的“灵魂”💻
算法是计算机科学的基石。理解它,才能真正掌握编程的本质。
🌟 Python + 算法 = 超能力组合!
-
Python的简洁性让你聚焦算法逻辑,而非语法细节。
-
丰富的内置函数(如
sort()
,set()
,collections
模块)是解题“神器”。 -
即时反馈的特性(REPL环境)助你快速试错迭代。
🔥 你准备好了吗?
本文精选了20道基础Python算法练习题,覆盖:
markdown
复制
下载
✅ 字符串处理 ✅ 列表操作 ✅ 递归与循环 ✅ 数据结构 ✅ 数学逻辑 ✅ 经典问题(斐波那契、二分查找等)
适合人群:
-
刚学完Python语法的新手
-
想巩固基础的转行者
-
面试前热身的求职者
📢 挑战开始前的小贴士:
-
先独立思考,哪怕花1小时解1题,也比直接看答案收获更大。
-
善用
print()
调试,亲眼看到变量如何变化。 -
尝试多种解法:暴力解法→优化解法→炫技解法(列表推导式、递归等)。
-
记住:“跑通”≠“写好”,完成后反问自己:
❓ 时间复杂度能更低吗?
❓ 代码可读性如何?
代码不止是工具,更是思想的载体。
现在,深呼吸,打开编辑器,迎接你的第一次算法挑战吧!
答案与解析将在下一篇公布——但请先尽情享受独立思考的乐趣!💡
下翻查看题目👇(题目列表略,由博主提供)
你的第一行代码,就是改变世界的起点。 🌍
✅ 1. 判断一个数是否为素数
判断一个数是否只被 1 和它本身整除。
示例:
输入:29
输出:True
def is_prime(n):
if n <= 1: return False
for i in range(2, int(n**0.5)+1):
if n % i == 0: return False
return True
print(is_prime(29)) # True
✅ 2. 斐波那契第 N 项
返回第 N 项斐波那契数。
示例:
输入:10
输出:55
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
print(fib(10)) # 55
✅ 3. 判断回文字符串
判断一个字符串是否为回文。
示例:
输入:"madam"
输出:True
def is_palindrome(s):
return s == s[::-1]
print(is_palindrome("madam")) # True
✅ 4. 找出最大值和最小值
在一个整数列表中找出最大值和最小值。
示例:
输入:[1, 5, 2, 9, 3]
输出:(1, 9)
def min_max(arr):
return (min(arr), max(arr))
print(min_max([1, 5, 2, 9, 3])) # (1, 9)
✅ 5. 冒泡排序
对列表进行升序排序。
示例:
输入:[4, 3, 1, 5]
输出:[1, 3, 4, 5]
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
print(bubble_sort([4, 3, 1, 5]))
✅ 6. 判断两个字符串是否为变位词
判断两个字符串是否由相同字符组成。
示例:
输入:"listen", "silent"
输出:True
def is_anagram(s1, s2):
return sorted(s1) == sorted(s2)
print(is_anagram("listen", "silent")) # True
✅ 7. 反转字符串
返回字符串的反转。
示例:
输入:"hello"
输出:"olleh"
def reverse_str(s):
return s[::-1]
print(reverse_str("hello")) # "olleh"
✅ 8. 计算列表中所有元素的和
示例:
输入:[1, 2, 3, 4]
输出:10
def sum_list(lst):
return sum(lst)
print(sum_list([1, 2, 3, 4])) # 10
✅ 9. 查找字符串中第一个唯一字符
示例:
输入:"swiss"
输出:"w"
def first_unique_char(s):
for c in s:
if s.count(c) == 1:
return c
return None
print(first_unique_char("swiss")) # w
✅ 10. 二分查找
示例:
输入:[1,2,3,4,5]
, 目标:3
输出:2
def binary_search(arr, target):
l, r = 0, len(arr)-1
while l <= r:
mid = (l+r)//2
if arr[mid] == target: return mid
elif arr[mid] < target: l = mid + 1
else: r = mid - 1
return -1
print(binary_search([1,2,3,4,5], 3)) # 2
✅ 11. 统计列表中元素频率
示例:
输入:[1,2,2,3,3,3]
输出:{1:1, 2:2, 3:3}
from collections import Counter
def freq_count(lst):
return dict(Counter(lst))
print(freq_count([1,2,2,3,3,3]))
✅ 12. 爬楼梯问题(动态规划)
每次可爬 1 或 2 阶,问爬 N 阶有多少种方法。
示例:
输入:4
输出:5
def climb_stairs(n):
a, b = 1, 1
for _ in range(n-1):
a, b = b, a + b
return b
print(climb_stairs(4)) # 5
✅ 13. 判断列表是否有重复元素
示例:
输入:[1,2,3,1]
输出:True
def has_duplicates(lst):
return len(lst) != len(set(lst))
print(has_duplicates([1,2,3,1])) # True
✅ 14. 返回列表的所有子集
示例:
输入:[1,2]
输出:[[], [1], [2], [1,2]]
def subsets(nums):
res = [[]]
for num in nums:
res += [r + [num] for r in res]
return res
print(subsets([1,2]))
✅ 15. 找到数组中唯一的数(其他都出现两次)
示例:
输入:[2,2,1]
输出:1
def single_number(nums):
res = 0
for num in nums:
res ^= num
return res
print(single_number([2,2,1])) # 1
✅ 16. 合并两个有序列表
示例:
输入:[1,3,5]
, [2,4,6]
输出:[1,2,3,4,5,6]
def merge_sorted(a, b):
return sorted(a + b)
print(merge_sorted([1,3,5], [2,4,6]))
✅ 17. 统计字符串中元音字母个数
示例:
输入:"hello world"
输出:3
def count_vowels(s):
return sum(c in 'aeiou' for c in s.lower())
print(count_vowels("hello world")) # 3
✅ 18. 有效括号判断
示例:
输入:"({[]})"
输出:True
def is_valid(s):
stack = []
match = {')':'(', ']':'[', '}':'{'}
for char in s:
if char in match:
if not stack or stack[-1] != match[char]: return False
stack.pop()
else:
stack.append(char)
return not stack
print(is_valid("({[]})")) # True
✅ 19. 矩阵转置
示例:
输入:[[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]
def transpose(matrix):
return list(map(list, zip(*matrix)))
print(transpose([[1,2,3],[4,5,6]]))
✅ 20. 最长无重复字符子串长度
示例:
输入:"abcabcbb"
输出:3
def length_of_longest_substring(s):
seen = {}
left = max_len = 0
for right, char in enumerate(s):
if char in seen and seen[char] >= left:
left = seen[char] + 1
seen[char] = right
max_len = max(max_len, right - left + 1)
return max_len
print(length_of_longest_substring("abcabcbb")) # 3
🚀 代码跃迁,始于此刻!
这20道题,是你算法宇宙的第一站✨。
每一次if
的抉择、每一次for
的循环、每一次递归的深入——都在重塑你的编程基因。
💡 记住:
-
遇到
Bug
?恭喜!你发现了隐藏的经验包。 -
卡壳半小时?你的思维正在突破维度。
-
解出第一题时,你已比昨天的自己强大十倍。
未来某天,当你用三行代码解决曾以为的“不可能”,
你会想起今天——这个勇敢按下F5
的自己。
🌟 你的键盘已就绪,世界的算法等待你的重写。
现在,去征服属于你的print("Hello, Algorithm!")
吧!
P.S. 解完题后,欢迎在评论区留下你的战斗痕迹💬
(或吐槽:“第7题的边界条件简直反人类!” —— 放心,我们都懂😂)
答案与深度解析,明日揭晓!
保持好奇,保持锋利。
我们更高维的算法世界里见! 🪐