剑指offerpython_剑指offer系列python实现 日更(一)

写在开头,这个专栏是记录刷题/学习/求职面试的小号专栏。主要方向约等于是混口饭吃干啥都行,希望能够在学习的过程中有所输出,也能帮助到别人~

废话少说,首先是经典的《剑指offer》系列,题目顺序是参考牛客网,以下都是python实现:剑指Offer_编程题_牛客网​www.nowcoder.com

1.二维数组中的查找

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

思路:举个栗子,数组长这个样子:

[[1,2,3,4,5],

[3,4,5,6,7],

[8,9,10,11,12]]

如果想找数字7,假设从左上角开始找,要么向右边找,要么向下面找(有两个方向要看);

假设右下角开始找,要么向上边找,要么向左边找(有两个方向要看);

假设从右上角开始找,只能选择一个方向,要么比5大的向下找,要么比5小的向左找(只看一个方向);

假设从左下角开始找,只能选择一个方向,要么比8小的向上找,要么比8大的向右找(只看一个方向)。

这样看来,只有一个方向的找起来更容易!所以我们可以从右上角开始(左下角也行没毛病)

找数字7的过程:

[[1,2,3,4,5],

[3,4,5,6,7],

[8,9,10,11,12]]

参考代码如下:

class Solution:

# array 二维列表

def Find(self, target, array):

# write code here

len_row = len(array) - 1 # 行的长度范围

len_col = len(array[0]) -1 # 列的长度范围

i = 0 # 从右上角开始,二维数组索引为array[0][len_col]

j = len_col # 用i,j来查找数组中的元素,i对应行,j对应列

while i <= len_row and j >= 0:

if target == array[i][j]:

return True

# 如果没找到且当前array[i][j]数值比target小,继续向下查找

elif target >= array[i][j]:

i += 1

# 如果没找到且当前array[i][j]数值比target大,向 查找

else:

j -= 1

# 搜索到数组边界也没找到target,说明没有,返回false

return False

最后运行结果:为啥运行时间这么久...TAT

2.替换空格

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

思路:第一个想到的就是用python中的replace方法:str.replace(old, new[, max]) ,把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

class Solution:

# s 源字符串

def replaceSpace(self, s):

# write code here

s = s.replace(' ', '%20')

return s

感觉这个方法有点,是不是误解了出题者意图,然后又尝试了另一种方法,用split方法分隔字符串,分隔符是空格,这个结果会保存到一个数组中。再用join方法把数组中每一个元素连接起来,连接符是“%20”:

class Solution:

# s 源字符串

def replaceSpace(self, s):

return "%20".join(s.split(' '))

好像变快了一点点,占用内存也变小了~

3. 从尾到头打印链表

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

思路:从头到尾遍历一遍链表,把它所有的值存到一个栈里,利用栈的先入后出特性,完成从尾到头打印。由于这个题里的输出需要时一个列表,所以这里利用列表作为存储结果,每次都存储到列表的第一个位置(伪装是栈),然后将列表返回。

一个丑陋的图示:有被丑到:)

# -*- coding:utf-8 -*-

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

# 返回从尾部到头部的列表值序列,例如[1,2,3]

def printListFromTailToHead(self, listNode):

# write code here

stack = []

h = listNode # 用h代替listNode遍历

while h: # 停止条件,遍历到了链表的最后一个节点

stack.insert(0, h.val) # 向栈压入数值,模拟栈的push操作

h = h.next # 接着遍历

return stack困了

明天继续更~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值