剑指offer刷题(一)

1、二维数组的查找

题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路一:从右上开始搜索,如果数组中的数比该数要大,那么想左移动一位,如果数组中的数比该数小,向下移动一位,因为数组本身是从左到右依次增大,从上到下依次增大。
class Solution:
    def Find(self,array, target):
        if array == []:
            return False

        row = 0
        col = len(array[0])-1
        while row < len(array) and col >=0:
            if array[row][col] == target:
                return True
            elif array[row][col] < target:
                row = row + 1
            else:
                col = col - 1
        return False
思路二:循环遍历查找(比较low),是时间复杂度O^2
class Solution:
    def Find(self, target, array):
        # write code here
        if not array:
            return False
        row = 0
        col = len(array[0])-1
        while row < len(array) and col >=0:
            if array[row][col] == target:
                return True
            elif array[row][col] < target:
                row = row + 1
            else:
                col = col - 1
        return False
测试代码
array = [[1, 2, 8, 9],
         [2, 4, 9, 12],
         [4, 7, 10, 13],
         [6, 8, 11, 15]]

findtarget = Solution()
print(findtarget.Find(array, 10))
print(findtarget.Find(array, 30))
print(findtarget.Find(array, 13.0))

2、替换空格

题目描述:请实现一个函数,将一个字符串中的空格替换成“%20”。
例如,当字符串为We Are Happy.则经过替换之后的字符串We%20Are%20Happy。

思路一:使用replace方法。

运行时间:28ms 占用内存:5624k

class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        return s.replace(' ','%20')
思路二:创建新的字符串进行替换

在自己电脑上运行没问题,但是牛客网上说存在越界。。。

class Solution:
    def replaceSpace(self, s):
        tempstr = ''
        if type(s) != str:
            return
        for c in s:
            if c == ' ':
                tempstr += '%20'
            else:
                tempstr += c
        return tempstr

3、从尾到头打印链表

题目描述:输入一个链表,从尾到头打印链表每个节点的值。'''

思路:使用insert方法插入列表,返回从尾部到头部的列表值序列
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        if not ListNode:
            return []

        result = []
        head = listNode

        while head:
            result.insert(0, head.val)
            head = head.next

        return result

4、重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

class Solution:
    # 返回构造的TreeNode根节点
    def reConstructBinaryTree(self, pre, tin):
        if not pre or not tin:
            return None
        root = TreeNode(pre[0])

        if set(pre) != set(tin):
            return None
        i = tin.index(pre[0])
        root.left = self.reConstructBinaryTree(pre[1:i + 1], tin[:i])
        root.right = self.reConstructBinaryTree(pre[i + 1:], tin[i + 1:])
        return root
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 3,188评论 0 1
  • 下面是我整理的,剑指Offer前五章所有的题目以及相关题和拓展题的题目和答案。代码的话放在github上,您可以下...
    kikido阅读 1,130评论 0 1
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 1,226评论 1 1
  • Browsersync能让浏览器实时、快速响应您的文件更改(html、js、css、sass、less等)并自动刷...
    Ho熊阅读 1,956评论 4 4
  • 许是一片花落,一滴雨露,一本好书,一个人,一段情,谁的旧时光不曾辜负?辜负别人,被别人辜负,那一切都是旧时光里的事...
    南遥思故阅读 1,393评论 15 23

友情链接更多精彩内容