剑指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困了
明天继续更~
剑指offerpython_剑指offer系列python实现 日更(一)相关推荐
- 剑指offer python实现_剑指offer系列python实现 日更(三)
今天来讲讲斐波那契数列和它的孩子们~先讲个冷笑话:今天来一盘斐波那契炒饭,它等于昨天的炒饭加上前天的炒饭 7.斐波那契数列 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第 ...
- leetcode 打印_剑指 Offer 总结 - leetcode 剑指offer系列
剑指 Offer 系列完结撒花!! 本篇文章是对整个系列的精华总结, 对系列的每篇文章进行了分类, 并用一句话概括每道题的思路, 方便大家理解和记忆, 当然也包含原文完整链接供大家参考 总的来说, 写 ...
- 在要求输入数字处找到非数字字符_剑指 Offer 67. 把字符串转换成整数 leetcode 剑指offer系列...
点击专辑上方"蓝字"关注我吧 题目难度: 中等 原题链接[1] 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ ...
- 数组中其余的排除_[leetcode 剑指offer系列] 面试题04. 二维数组中的查找
题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 这道题的优化空间非常大, 个人感觉很适合作为面试题, 值得一做. 大家在我的公众号"每日精选算法题"中的聊天框中回 ...
- 剑指offer系列-03.数组中的重复数字
剑指offer系列第03题.数组中的重复数字 找出数组中重复的数字.在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不 ...
- 剑指offer系列-24.反转链表
剑指offer系列第24题.反转链表 题目描述: 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例:输入: 1->2->3->4->5->N ...
- 剑指offer系列-06.从尾到头打印链表
剑指offer系列第06题.从尾到头打印链表 题目描述: 输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回). 示例 1:输入:head = [1,3,2] 输出:[2,3,1] /* ...
- 剑指offer系列-30.包含min函数的栈
剑指offer系列第30题.包含min函数的栈 题目描述: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中, 调用 min.push 及 pop 的时间复杂度都是 ...
- 剑指offer系列-09.用两个栈设计队列
剑指offer系列第09题.用两个栈设计队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead , 分别完成在队列尾部插入整数和在队列头部删除整 ...
最新文章
- 微服务“大门”如何选择?
- 史上最全的ubuntu16.04安装nvidia驱动+cuda9.0+cuDnn7.0
- 2 0 1 8 全球人工智能技术大会--邀请函
- 05传智_jbpm与OA项目_部门模块中增加部门的jsp页面增加一个在线编辑器功能
- 近业务=困死在一条船上?
- JavaScript遇到浏览器不兼容与解决方案
- 【讨论】不得不重视的问题:信息太多!信息太杂!
- [ SHELL编程 ] 远程服务器传输文件
- HAproxy配置文件操作
- scott用户对象维护
- 微信应用开发简单示例,学生自助报道系统
- 使用FFmpeg 编解码 FLV的HEVC(H265)格式的视频
- 电子科技大学计算机学院拟录取,2021年电子科技大学硕士研究生拟录取名单
- systemverilog之覆盖率
- ToolBar修改返回按钮图标
- R语言|导入excel数据
- 用Vue完成加减乘除运算
- Excel后缀名 .xls和.xlsx 有什么区别?
- vue视频播放插件vue-video-player
- 人机交互软件又添新成员,CarLink认证流程详解
热门文章
- python3.x中的生成器generator调用next方法
- FIFOQueue '_4_batch_processing/batch_join/fifo_queue' is closed and has insu
- python-opencv3 kmeans图像分类
- 奇异值的物理意义是什么?
- 十五、Redis三种特殊类型之二HyperLoglog
- oracle form 头行合计,FORM主从块头行金额汇总
- 文章收录查询 php,php实现检查文章是否被百度收录,_PHP教程
- 梁体混凝土弹性模量计算_预应力混凝土连续梁多点转向顶推施工技术研究
- parquet to mysql_在hive中使用parquet (CDH4.3)
- php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...