目录
一、搜素旋转排序数组
1、题目描述
2、题解
3、源码
二、在排序数组中查找元素的第一个和最后一个位置
1、题目描述
2、题解
3、源码
三、搜索插入元素的位置
1、题目描述
2、题解
3、源码
四、有效数独
1、题目描述
2、题解
3、源码
五、外观数列
1、题目描述
2、题解
3、源码
一、搜素旋转排序数组
1、题目描述
2、题解
3、源码
class Solution:
def search(self, nums: List[int], target: int) -> int:
for i in range(len(nums)):
if nums[i] == target:
return i
else:
return -1
二、在排序数组中查找元素的第一个和最后一个位置
1、题目描述
2、题解
3、源码
class Solution:
def searchRange(self, nums: List[int], target: int) -> List[int]:
l = 0
r = len(nums) - 1
Left = -1
Right = -1
while l < len(nums):
if nums[l] == target:
Left = l
break
l +=1
while r >= 0:
if nums[r] == target:
Right = r
break
r -=1
return Left,Right
三、搜索插入元素的位置
1、题目描述
2、题解
3、源码
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
for i in range(len(nums)):
if target == nums[i]:
return i
if (target < nums[i]):
return i
else:
return i + 1
四、有效数独
1、题目描述
?
2、题解
3、源码
class Solution:
def isValidSudoku(self, board: List[List[str]]) -> bool:
row, col, sqrt = defaultdict(set), defaultdict(set), defaultdict(set)
for i in range(9):
for j in range(9):
val = board[i][j]
if val == '.':
continue
point = i // 3 * 3 + j // 3
if val in row[i] or val in col[j] or val in sqrt[point]:
print(i, j, val)
print(row, col, sqrt)
return False
row[i].add(val)
col[j].add(val)
sqrt[point].add(val)
return True
五、外观数列
1、题目描述
?
2、题解
3、源码
class Solution:
def countAndSay(self, n: int) -> str:
pre = ''
cur = '1'
# 从第 2 项开始
for _ in range(1, n):
# 这里注意要将 cur 赋值给 pre
# 因为当前项,就是下一项的前一项。有点绕,尝试理解下
pre = cur
# 这里 cur 初始化为空,重新拼接
cur = ''
# 定义双指针 start,end
start = 0
end = 0
# 开始遍历前一项,开始描述
while end < len(pre):
# 统计重复元素的次数,出现不同元素时,停止
# 记录出现的次数,
while end < len(pre) and pre[start] == pre[end]:
end += 1
# 元素出现次数与元素进行拼接
cur += str(end-start) + pre[start]
# 这里更新 start,开始记录下一个元素
start = end
return cur
|