240. 搜索二维矩阵 II
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性:
- 每行的元素从左到右升序排列。
- 每列的元素从上到下升序排列。
示例:
现有矩阵 matrix 如下:
[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 21, 23, 26, 30] ]
给定 target = 5
,返回 true
。
给定 target = 20
,返回 false
。
代码:
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
#### the first method
# for i in range(len(matrix)):
# for j in range(len(matrix[i])):
# if matrix[i][j] == target:
# return True
# else:
# continue
# return False
#### the second method
if len(matrix)==0 or len(matrix[0])==0:
return False
for i in range(len(matrix)):
if target==matrix[i][-1] or target==matrix[i][0]:
return True
elif target<matrix[i][-1] and target>matrix[i][0]:
left,right=0,len(matrix[i])-1
while left<=right:
mid=(left+right)//2
if target==matrix[i][mid]:
return True
elif target>matrix[i][mid]:
left=mid+1
else:
right=mid-1
return False
55. 跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例 1:
输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
示例 2:
输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位代码如下:
class Solution:
def canJump(self, nums):
"""
:type nums: List[int]
:rtype: bool
"""
### the first method
# max_len = 0
# for i in range(len(nums)):
# if i > max_len:
# return False
# max_len = max(max_len, i + nums[i])
# if max_len >=len(nums):
# return True
# return True
### the second method
j = len(nums) - 1
for i in range(len(nums)-2, -1, -1):
temp = j - i
if temp <= nums[i]:
j = i
return j == 0