题目1:给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 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<r):
            if(numbers[l]+numbers[r]== target):
                return [l+1,r+1]
            if(numbers[l]+numbers[r] <target):
                l += 1
            else:
                r -= 1

## 测试用例:
def test_towSum1(self):
    assert towSum([0,1, 1, 2, 3, 6,8], 2) == [1, 4]
def test_towSum2(self):
    assert towSum([1,2,5,6,12], 13) == [1, 5]
def test_towSum3(self):
    assert towSum([2, 7, 11, 15], 9) == [1, 2]

## 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;
    }

    题目2:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。

    示例 1:
    输入:2
    输出:2
    解释:有两种方法可以爬到楼顶。

    1. 1 阶 + 1 阶
    2. 2 阶
      示例 2:
      输入:3
      输出:3
      解释:有三种方法可以爬到楼顶。
    3. 1 阶 + 1 阶 + 1 阶
    4. 1 阶 + 2 阶
    5. 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;
        }
    

      题目3:给定一个非负整数数组,你最初位于数组的第一个位置。
      数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。

      示例 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;
              }
          }
      

        题目4:以 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//bc/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
        

          题目5:给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。

          说明:
          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 = “ab”
          输出: 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

            题目6:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 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
            

              图片

               

              感谢每一个认真阅读我文章的人!!!

              作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

              软件测试面试文档

              我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

               

                        视频文档获取方式:
              这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

              Logo

              技术共进,成长同行——讯飞AI开发者社区

              更多推荐