问题一:二维数组中的查找
描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
[[1,2,8,9],[2,4,9,12], [4,7,10,13],[6,8,11,15]]
给定 target = 7,返回 true。
给定 target = 3,返回 false。
示例1:
输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:true
说明:存在7,返回true
示例2:
输入:3,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:false
说明:不存在3,返回false
方法1:暴力法。直接遍历一遍数组,判断目标 target 是否存在。
方法2:二分查找,从右上角或者左下角开始查找,将查找分为向上或向右两种情况。以从左下角开始为例,首先选取数组中左下角的数字,如果该数字等于目标数字,则查找过程结束;如果该数字大于目标数字,则开始向右查找,即列+1;如果该数字小于目标数字,则开始向上查找,即行-1。直至查找成功或遍历停止(即查找失败)。时间复杂度为 O(m+n) ,其中 m 为行数,n 为列数,最坏情况下,需要遍历 m+n 次,空间复杂度为 O(1)。
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
cols = len(array)
rows = len(array[0])
col = cols -1
row = 0
while col>=0 and row<rows:
if target == array[col][row]:
return True
elif target > array[col][row]:
row += 1
else:
col -= 1
return False
问题二:替换空格
描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
示例:
输入:"We Are Happy"
返回值:"We%20Are%20Happy"
方法1:创建一个空列表,将字符串中字符按顺序添加至列表中,若当前字符为空格,则替换为“%20”。
class Solution:
def replaceSpace(self , s ):
# write code here
l = len(s)
arr = []
for i in range(l):
if s[i] ==" ":
arr.append("%20")
else:
arr.append(s[i])
return "".format().join(str(i) for i in arr)
方法2:直接使用 python 中 replace 函数进行替换。
class Solution:
def replaceSpace(self , s ):
# write code here
return s.replace(' ', '%20').format()