经典测试工程师面试题(三)
经典测试工程师面试题(一)
经典测试工程师面试题(二)
背景
为了扩展家里领导的测试知识水平和专业知识能力提升,以及为以后更好的面试做基础,特意从众多测试相关题型整理出来,其中的答案仅供参考。给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。
说明:
返回的下标值(index1 和 index2)不是从零开始的。
你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。
示例:
输入: numbers = [2, 7, 11, 15], target = 9
输出: [1,2]
解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。
## python
class Solution(object):
def twoSum(self, numbers, target):
l=0
r=len(numbers)-1
while(l
## Java
public int[] twoSum(int[] numbers, int target) {
int left = 0;
int right = numbers.length - 1;
while (left < right) {
if (numbers[left] + numbers[right] == target) {
return new int[]{left + 1, right + 1};
}
if (numbers[left] + numbers[right] < target) {
left += 1;
} else {
right -= 1;
}
}
return null;
}
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。
示例 1:输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.1 阶 + 1 阶
2.2 阶
示例 2:输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.1 阶 + 1 阶 + 1 阶
2.1 阶 + 2 阶
3.2 阶 + 1 阶
Python
## 不推荐 效率极低 ##
def setpMethod(num):
if(n == 1 or n == 2):
return n
else:
return self.setpMethod(num-1)+self.setpMethod(num-2)## 推荐写法 ##
def climbStairs(self, n):
if(n == 1 or n == 2):
return n
num1=1
num2=2
while(n >= 3):
result = num1 + num2
num1 = num2
num2 = result
n -=1
return result## Java ##
public int setpMethod(int n){
if(n ==1 || n ==2){
return n;
}
int result = 0,n1 = 1,n2 = 2;
while (n>=3){
result = n1 + n2;
n1 = n2;
n2 = result;
n--;
}
return result;
}
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。
示例 1:输入: [2,3,1,1,4]
输出: true
解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。
示例 2:输入: [3,2,1,0,4]
输出: false
解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。
## python ##
class Solution(object):
def canJump(self, nums):
need = 1
if(len(nums) ==1):
return True
if(nums[0] == 0):
return False
for i in range(len(nums)-2,-1,-1):
if(nums[i] == 0 or nums[i] < need):
need += 1
else:
need = 1
if(need == 1) :
return True
else:
return False## java ##
public boolean canJump(int[] nums) {
int n = 1;
if(nums.length ==1){
return true;
}
if(nums[0] == 0){
return false;
}
for(int i=nums.length-2;
i>=0;
i--){
if(nums[i] >= n){
n=1;
}else{
n++;
}
}
if(n == 1){
return true;
}else{
return false;
}
}
以 Unix 风格给出一个文件的绝对路径,你需要简化它。或者换句话说,将其转换为规范路径。
在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (..) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。更多信息请参阅:Linux / Unix中的绝对路径 vs 相对路径
请注意,返回的规范路径必须始终以斜杠 / 开头,并且两个目录名之间必须只有一个斜杠 /。最后一个目录名(如果存在)不能以 / 结尾。此外,规范路径必须是表示绝对路径的最短字符串。
示例 1:输入:"/home/"
输出:"/home"
解释:注意,最后一个目录名后面没有斜杠。
示例 2:输入:"/../"
输出:"/"
解释:从根目录向上一级是不可行的,因为根是你可以到达的最高级。
示例 3:输入:"/home//foo/"
输出:"/home/foo"
解释:在规范路径中,多个连续斜杠需要用一个斜杠替换。
示例 4:输入:"/a/./b/../../c/"
输出:"/c"
示例 5:输入:"/a/../../b/../c//.//"
输出:"/c"
示例 6:输入:"/a//b////c/d//././/.."
输出:"/a/b/c"
##python##
def simplifyPath(self, path):
"""
:type path: str
:rtype: str
"""
paths = path.split('/')
str = ''
pathlist = [i for i in paths if I]
result = []
for j in range(len(pathlist)):
print(j)
if(pathlist[j] == ".."):
if(result):
result.pop()
elif(pathlist[j] == "."):
continue
else :
result.append(pathlist[j])
if not result:
return '/'
for k in range(len(result)):
str = str + '/' + result[k]
return str
给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '' 的通配符匹配。'?' 可以匹配任何单个字符。'' 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。
示例 1:输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
示例 2:输入:
s = "aa"
p = "*"
输出: true
解释: '*' 可以匹配任意字符串。
示例 3:输入:
s = "cb"
p = "?a"
输出: false
解释: '?' 可以匹配 'c', 但第二个 'a' 无法匹配 'b'。
示例 4:输入:
s = "adceb"
p = "*a*b"
输出: true
解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce".
示例 5:输入:
s = "acdcb"
p = "a*c?b"
输入: false
##python##
def isMatch(self, s, p):
si, pi, pj, sj = 0, 0, -1, -1
while si < len(s):
if pi < len(p) and p[pi] == '*':
pi += 1
pj = pi
sj = si
elif pi < len(p) and (p[pi] == '?' or p[pi] == s[si]):
pi += 1
si += 1
elif pj != -1:
pi = pj
sj += 1
si = sj
else:
return False
while (pi < len(p) and p[pi] == '*'):
pi += 1
return pi == len(p)
文章图片
执行结果.png 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
## python ##
class Solution(object):
def addTwoNumbers(self, l1, l2):
n =l1.val + l2.val
l3 = ListNode(n%10)
l3.next = ListNode(n//10)
p1 = l1.next
p2 = l2.next
p3 = l3
while True:
if p1 and p2:
sum = p1.val+ p2.val + p3.next.val
p3.next.val = sum % 10
p3.next.next = ListNode(sum//10)
p1 = p1.next
p2 = p2.next
p3 = p3.next
elif p1 and not p2:
sum = p1.val + p3.next.val
p3.next.val = sum %10
p3.next.next = ListNode(sum // 10)
p1 = p1.next
p3 = p3.next
elif not p1 and p2:
sum = p2.val +p3.next.val
p3.next.val = sum % 10
p3.next.next = ListNode(sum // 10)
p2 = p2.next
p3 = p3.next
else :
if p3.next.val == 0:
p3.next = None
break
return l3
文章图片
执行结果.png 来源:
【经典测试工程师面试题(三)】以上题目来源于leetcode-cn
推荐阅读
- 女生该不该用小号测试男朋友()
- BNC公链|BNC公链 | Eth2.0测试网Topaz已质押超100万枚ETH
- 这份史上最经典的3大学习方法,清华北大学霸都在用!
- 我们为什么喜欢看《古惑仔》,它到底经典在哪()
- 我的软件测试开发工程师书单
- 性能测试中QPS和TPS的区别
- 经典的白色西装太吸睛了!李沁baby赵薇穿出颜值巅峰,这也太好看
- 如何在手机上查看测试vue-cli构建的项目
- 工作好忙
- javascript|javascript 性能测试笔记