python 常规算法
以下是一些常见的 Python 算法练习题(1-10题):
1. 两数之和:给定一个整数列表和一个目标值,在列表中到两个数,使它们的和等于目标值,并返回这两个数的索引。
```python
def two_sum(nums, target):
hashmap = {}
for i, num in enumerate(nums):
complement = target - num
if complement in hashmap:
return [hashmap[complement], i]
hashmap[num] = i
```
2. 给定一个字符串,判断它是否是回文串。只考虑字母和数字字符,可以忽略大小写。
```python
def is_palindrome(s):
alphanumeric = [c.lower() for c in s if c.isalnum()]
return alphanumeric == alphanumeric[::-1]
```
3. 旋转数组:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。
```python
def rotate(nums, k):
k = k % len(nums)
nums[:] = nums[-k:] + nums[:-k]
```
4. 有效的括号:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
```python
def is_valid(s):
stack = []
pairs = {')': '(', ']': '[', '}': '{'}
for char in s:
if char in pairs:
if not stack or stack.pop() != pairs[char]:
return False
else:
stack.append(char)
return not stack
```
5. 合并两个有序链表:将两个升序链表合并为一个新的升序链表并返回。
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
= next
def merge_two_lists(l1, l2):
dummy = ListNode()
curr = dummy
while l1 and l2:
if l1.val <= l2.val:
= l1
l1 = l1.next
else:
= l2
l2 = l2.next
curr =
= l1 if l1 else l2
```
6. 最长公共前缀:编写一个函数来查字符串数组中的最长公共前缀字符串。如果不存在公共前缀,返回空字符串 ""。
```python
def longest_common_prefix(strs):
if not strs:
return ""
min_str = min(strs, key=len)
python正则表达式判断 for i, char in enumerate(min_str):
for other in strs:
if other[i] != char:
return min_str[:i]
return min_str
```
7. 反转整数:给定一个 32 位有符号整数,将其反转并返回。若反转后整数溢出,则返回 0。
```python
def reverse(x):
sign = -1 if x < 0 else 1
x = abs(x)
res = 0
while x:
res = res * 10 + x % 10
x //= 10
res = sign * res
return res if -2**31 <= res <= 2**31 - 1 else 0
```
8. 字符串转换整数:实现一个函数,将字符串转换为整数。若字符串中存在多余的空格或非数字字符,则返回 0。若转换后的整数溢出,则返回 INT_MAX (2^31 - 1) 或 INT_MIN (-2^31)。
```python
def my_atoi(s):
s = s.strip()
if not s:
return 0
sign = -1 if s[0] == '-' else 1
if s[0] in ('-', '+'):
s = s[1:]
i = 0
res = 0
while i < len(s) and s[i].isdigit():
res = res * 10 + int(s[i])
i += 1
res = sign * res
res = max(min(res, 2**31 - 1), -2**31)
return res
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论