题目1:二维数组的查找

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

class Solution:
# array 二维列表
def Find(self, target, array):
for i in range(len(array)):
for j in range(len(array[0])):
if array[i][j] == target:
return True
return False array = [[1,2,3],[4,5,6],[7,8,9]]
solution = Solution()
print(solution.Find(9,array))

题目2:替换空格

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

class Solution:
# s 源字符串
def replaceSpace(self, s):
s =s.replace(' ','%20')
# s = '%20'.join(s.split(' '))
return s
# write code here str = "We Are Happy."
solution = Solution()
print(solution.replaceSpace(str))

题目3:从尾到头打印链表 

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

class ListNode:
def __init__(self, x):
self.val = x
self.next = None class Solution:
# 返回从尾部到头部的列表值序列,例如[1,2,3]
def printListFromTailToHead(self, listNode):
newlist = []
while listNode:
newlist.append(listNode.val)
listNode = listNode.next
return newlist[::-1] A1 = ListNode(1)
A2 = ListNode(2)
A3 = ListNode(3)
A4 = ListNode(4)
A5 = ListNode(5) A1.next = A2
A2.next = A3
A3.next = A4
A4.next = A5 solution = Solution()
print(solution.printListFromTailToHead(A1))

题目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):
# write code here
if len(pre)==0:
return None
elif len(pre)==1:
return TreeNode(pre[0])
else:
root=TreeNode(pre[0])
#根节点的索引
post = tin.index(pre[0])
root.left=self.reConstructBinaryTree(pre[1:post+1],tin[:post])
root.right=self.reConstructBinaryTree(pre[post+1:],tin[post+1:])
return root

题目5:用2个栈实现队列

class Solution:
def __init__(self):
#A为入栈,B为出栈
self.stackA=[]
self.stackB=[]
def push(self, node):
#入栈直接压入就行
self.stackA.append(node)
# write code here
def pop(self):
# return xx
#如果B不为空,先将B出栈
if self.stackB:
return self.stackB.pop()
#如果A为空,返回None
elif not self.stackA:
return None
else:
while self.stackA:
#将栈A出栈的值反压入栈B中,出栈时就说先入先出
self.stackB.append(self.stackA.pop())
return self.stackB.pop()

题目6:旋转数组的最小数字 

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

解法1:(懒)

class Solution:
def minNumberInRotateArray(self, rotateArray): if len(rotateArray)==0:
return 0
else:
return min(rotateArray)

解法2:(无脑)

class Solution:
def minNumberInRotateArray(self, rotateArray): if len(rotateArray)==0:
return 0
else:
for i in range(1,len(rotateArray)):
if rotateArray[0]>rotateArray[i]:
rotateArray[0],rotateArray[i] = rotateArray[i],rotateArray[0]
return rotateArray[0] 

题目7:斐波拉契数列

题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39

解法1:递归(时间复杂度太大,可能编译不通过)

class Solution:
def Fibonacci(self, n):
if n <=0:
return 0
elif n <= 2:
return 1
return self.Fibonacci(n-1)+self.Fibonacci(n-2)

解法2:循环就完了

class Solution:
def Fibonacci(self, n):
if n ==0:
return 0
elif n == 1:
return 1
else:
big = 1
small = 0
for i in range(2,n+1):
big,small = big+small,big
return big

题目8:跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

倒着想.n级的跳法=n-1级的跳法+n-2级的跳法,实际上也是斐波拉契数列的问题

class Solution:
def jumpFloor(self, number):
if number==0:
return 0
elif number<=2:
return number
else:
f1,f2 = 1,2
for i in range(3,number+1):
f1,f2 = f2,f1+f2
return f2

题目9:变态跳台阶

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

同上一题

f(n)=f(0)+f(1)+...+f(n-1)  f(n-1)=f(0)+f(1)+...+f(n-2)  第一个式子减第二个式子f(n)=2f(n-1)

class Solution:
def jumpFloor(self, number):
if number==0:
return 0
elif number<=2:
return number
else:
f1,f2 = 1,2
for i in range(3,number+1):
f1,f2 = f2,2*f2
return f2 

题目10:矩形覆盖

题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

也是斐波拉契数列的问题,第一次横着放f(n-1),竖着放(必须放2个)f(n-2)   f(n)=f(n-1)+f(n-2)

class Solution:
def rectCover(self, number):
if number==0:
return 0
elif number<=2:
return number
else:
f1,f2 = 1,2
for i in range(3,number+1):
f1,f2 = f2,f1+f2
return f2

题目11:二进制中1的个数

题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

负数先与0xffffffff做与运算

    def NumberOf1(self, n):
# write code here
return bin(n&0xffffffff).count('1')  

题目12:数值的整数次方

题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

emmm   硬来

class Solution:
def Power(self, base, exponent):
if base==0:
return 0
elif base==1 or exponent==0:
return 1
elif exponent==1:
return base
else:
result = 1.0
for i in range(abs(exponent)):
result *= base
if exponent < 0 :
return 1.0/result
else:
return result
# write code here

题目13:调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

class Solution:
def reOrderArray(self, array):
if len(array) <= 1:
return array
else:
result = []
list = []
for i in range(len(array)):
if array[i]%2 != 0:
result.append(array[i])
else:
list.append(array[i])
for j in list:
result.append(j)
return result
# write code here

题目14:链表中倒数第K个节点

题目:输入一个链表,输出该链表中倒数第k个结点。

将链表转化成列表在求节点的值

class Solution:
def FindKthToTail(self, head, k):
if head == None or k <= 0:
return None
l = []
while head != None:
l.append(head)
head = head.next
if k>len(l):
return None
else:
result = l[-k]
return result
# write code here

题目15:反转链表

题目:输入一个链表,反转链表后,输出新链表的表头。

class Solution:
# 返回ListNode
def ReverseList(self, pHead):
if pHead==None or pHead.next==None:
return pHead
result=None
while pHead!=None:
temp=pHead.next
pHead.next=result
result=pHead
pHead=temp
return result
# write code here

题目16:合并2个排序的链表

题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

class Solution:
# 返回合并后列表
def Merge(self, pHead1, pHead2):
if pHead1==None and pHead2==None:
return None
num1=[]
num2=[]
while pHead1!=None:
num1.append(pHead1.val)
pHead1=pHead1.next
while pHead2!=None:
num2.append(pHead2.val)
pHead2=pHead2.next
num=num1+num2
num.sort()
pHead=ListNode(num[0])
pre=pHead
for i in range(1,len(num)):
node=ListNode(num[i])
pre.next=node
pre=pre.next
return pHead 

题目17:树的子结构

pass

题目18:二叉镜像树

pass

题目19:顺时针打印矩阵

<剑指offer>面试题的更多相关文章

  1. Java面试题—初级(7)

    作为一枚Java后端开发者,数据库知识必不可少,对数据库的掌握熟悉度的考察也是对这个人是否有扎实基本功的考察.特别对于初级开发者,面试可能不会去问框架相关知识,但是绝对不会不去考察数据库知识,这里收集 ...

  2. Java面试题—初级(9)

    139. Java中的泛型是什么 ? 使用泛型的好处是什么? 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数. 好处: 1.类型安全,提供编译期 ...

  3. python面试题--初级(二)

    基础不牢,地动山摇,面试的时候经常会被问到一些平时基础的很容易被忽视的知识点,所以重在积累,多看多背深入理解,才能在某一天工作中豁然开朗恍然大悟. 面试题不仅仅为了应付面试,更是知识点的一个梳理总结归 ...

  4. 面试题<初级>

    INTERVIEW .markdown-body ul pre code { background:red; font-size:40px; } @code-char:"```" ...

  5. Java面试题—初级(4)

    31.String s = new String("xyz");创建了几个StringObject?是否可以继承String类? 两个或一个都有可能,"xyz" ...

  6. Java面试题—初级(3)

    21.ArrayList和Vector的区别 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种动态 ...

  7. Java面试题—初级(2)

    11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...

  8. Java面试题—初级(1)

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...

  9. Java面试题—初级(5)

    41.a.hashCode() 有什么用?与 a.equals(b) 有什么关系? hashCode() 方法对应对象整型的 hash 值.它常用于基于 hash 的集合类,如 Hashtable.H ...

  10. Java面试题—初级(8)

    基本表结构:  student(sno,sname,sage,ssex)学生表        course(cno,cname,tno) 课程表        sc(sno,cno,score) 成绩 ...

随机推荐

  1. 二分+mu函数实质及应用(原理)!——bzoj2440好题

    首先想到用二分来判断 不是平方数的倍数,即没有次数>=2的质因子显然用容斥原理,即所有答案-1个质因子的平方的所有倍数+2个质因子的所有平方倍...等价于对于每个数,如果它有奇数个质因子,那么其 ...

  2. 1 visual studio code 配置C++开发环境 (windows 开发环境)

    0 引言 最近帮GF(不幸变成ex了)配置C++开发环境,一开始想给她装个visual studio13完事,但是一想到自己安装以及使用时的诸多麻烦,就有点退却,觉得没有这个必要.正好了解到vscod ...

  3. NX二次开发-UFUN CSYS坐标系转换UF_CSYS_map_point

    1 NX9+VS2012 2 3 #include <uf.h> 4 #include <uf_curve.h> 5 #include <uf_csys.h> 6 ...

  4. ggplot2在一幅图上画两条曲线

    ggplot2在一幅图上画两条曲线 print(data)后的结果是 C BROWN.P MI.P 0 0.9216 0.9282 30 0.9240 0.9282 100 0.9255 0.9282 ...

  5. c++11新特性学习2

    noexcept 替代 throw.优点是更安全, 如果noexcept 修饰的函数抛出了异常,编辑器可以直接选择终止程序. C++ 11中析构函数默认为noexcept(true),从而阻止异常的扩 ...

  6. 洛谷P1860——新魔法药水

    传送门:QAQQAQ 题意:商店里有N种药水,每种药水都有一个售价和回收价.小S攒了V元钱,还会M种魔法,可以把一些药水合成另一种药水.他一天可以使用K次魔法,问他一天最多赚多少钱? N<=60 ...

  7. 刚装完Linux就CPU占用率高

    top命令发现如下三个进程占据了前三的CPU使用率 wpa_supplicant NetworkManager rsyslogd google发现前两个进程与无线网络有关,我的电脑是笔记本,插的有线, ...

  8. 数据分析相关概念(numpy)

    矢量 矢量是指一堆形成的集合. 多维数组也叫做矢量化计算. 单独一个数叫做标量 例: import datetime as dt import numpy as np n2=10000 start2 ...

  9. Springboot整合dubbo搭建基本的消费、提供和负载均衡

    文章目录 1.确定接口 2.创建提供者 2.1 pom配置 2.2dubbo配置文件 2.3 application.properties 2.4 mybatis相关 2.4.1 配置UserMapp ...

  10. navicat远程连接报1045 access denied for user'root'@'ip'(using pasword:yes".............

    这个其实很简单,授权就行了.如下 1.GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;2 ...