持续更新ing 软件测试面试常见问题总结( 四 )


3.合并两个有序数组
注意:
1.保证 A 数组有足够的空间存放 B 数组的元素,A 和 B 中初始的元素数目分别为 m 和 n,A的数组空间大小为 m+n
2.不要返回合并的数组,将数组 B 的数据合并到 A 里面就好了
3. A 数组在[0,m-1]的范围也是有序的
例1:
A: [4,5,6,0,0,0],m=3
B: [1,2,3],n=3
合并过后A为:
A: [1,2,3,4,5,6]
方法一:
这个方法很简单,但是很蠢,完全没有利用到有序这个条件 。虽然是对的,面试官也不会满意 。
class Solution:def merge(self , A, m, B, n):for i in range(n):A[m+i]=B[i]A.sort()return A
方法二:
这个方法的核心思想是三个指针,分别从A、B、和A扩容后的数组末尾的位置开始,循环比较A和B中的最大值(即倒数第一位),将最大值放到扩容后数组的末尾 。之后,如果B中的指针计数还存在,即B中存在元素没有挪过来,那么需要再次循环B中剩余的元素,替换到A扩容后的数组中 。
class Solution:def merge(self , A, m, B, n):i =m-1j =n-1k =m+n-1while i>=0 and j>=0:if A[i]>B[j]:A[k] =A[i]i -=1k -=1else:A[k] =B[j]j -=1k -=1while j>=0:A[k] =B[j]k -=1j -=1
4.两数之和
给出一个整型数组和一个目标值 ,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列 。
例如:
给出的数组为 [20, 70, 110, 150] , 目标值为90
返回一个数组 [1,2] ,因为 20+70==90
#两个循环,注意range里的范围有讲究以及返回的数组下标是从1开始数的 。class Solution:def twoSum(self , numbers , target ):for i in range(0,len(numbers)-1):for j in range(i+1,len(numbers)):if numbers[i] +numbers[j] ==target:result =[i+1,j+1]return result
七、用例设计类 1.手机支付宝支付设计测试点
付款方式:
扫码(扫码识别时间、支持扫描相册图片里的二维码、同屏出现多个二维码处理逻辑)
转账(转给支付宝账户/手机号、转给各个银行卡、输入框校验)
付款码(金额限制、多次扫描限制、存在时间限制、无网络状态能否使用、已过期的二维码能否使用)
支付确认手段:
密码(正确、错误、不输、复制粘贴限制、多次错误锁定)
指纹(正确、错误、多次错误锁定)
人脸识别(正确、错误、正确的人但是状态错误(平面图像、闭眼等)、多人同框优先识别谁)