面試常見程式題python版 持續更新中

2021-08-17 15:17:26 字數 4039 閱讀 8842

二叉樹的遍歷遞迴和非遞迴 python版本

前序遍歷非遞迴

def preorder(self, root):

if root == none:

return

stack =

node = root

while node or stack:

while node:

# 從根節點開始,一直找它的左子樹

print(node.val)

node = node.left

# while結束表示當前節點node為空,即前乙個節點沒有左子樹了

node = stack.pop()

# 開始檢視它的右子樹

node = node.right

中序遍歷非遞迴

def inorder(self,root):

if root == none:

return

stack =

while node or stack:

while node:

# 從根節點開始,一直找到左子樹

node = node.left

# while結束表示當前節點node為空,即前乙個節點沒有左子樹了

node = stack.pop()

print(node.val)

node = node.right

後序遍歷非遞迴

def postorder(self,root):

if root == none:

return

stack1 =

stack2 =

node = root

while stack1:

# 這個while迴圈使用者找到後續遍歷的逆序,存在stack2中

node = stack1.pop()

if node.left:

if node.right:

while stack2:

print(stack2.pop().val)

public class solution 

print sorted(d.items(),key=lambda x:x[1],reverse=false)

#快速排序

def partition(v,left,right):

key=v[left]

low=left

high=right

while low=key):

high -=1

v[low]=v[high]

while (low操作1:m=s ;s=s+s

操作2:s=s+m

初始化:s="a";m=s

給定乙個字串長度n最少需要幾次操作才能獲得最後的結果

測試用例:n=4 返回2

number = int(raw_input("enter a number: "))

def test(number):

r =

while number != 1:

for i in range(1, number + 1):

if (number % i) == 0 and i != 1:

number = number / i

if number == 1:

# print " %d" %i

else:

# print " %d*" %i,

break

count = 0

count1 = 0

count2 = 0

for i in r:

if i == 2:

count += 1

elif i == 3:

count1 += 2

else:

count2 += (i-1)

return (count+count1+count2)

test(number)

思路:將兩個字串a,b轉換成列表,以第二個字串b的長度作為滑動視窗的長度進行滑動,將結果以字典形式存起來,key值是a列表下標,value值就是滑動視窗在a列表上獲得的長度為len(b_list)子列表.

#kmp字串匹配。給你兩個字串,尋找其中乙個字串是否包含另乙個字串,如果包含,返回包含的起始位置

def ngrams(input,n):

output = {}

for i in range(len(input)-n+1):

output.setdefault(i,input[i:i+n])#

return output

def find(a,b):

a_list=list(a)

b_list=list(b)

n=len(b_list)

a_dict=ngrams(a_list,n)

for k,v in a_dict.items():

if v==b_list:

return k

else:

continue

return -1

a=raw_input("a:")

b=raw_input("b:")

k=find(a,b)

print k

樹的路徑

# definition for a binary tree node.

class treenode(object):

def __init__(self, x):

self.val = x

self.left = none

self.right = none

class solution(object):

def binarytreepaths(self, root):

""":type root: treenode

:rtype: list[str]

"""paths=

if not root:return paths

leftpaths,rightpaths=,

leftpaths=self.binarytreepaths(root.left)

rightpaths=self.binarytreepaths(root.right)

for path in leftpaths:

print path

a=str(root.val)+"->"+str(path)

for path in rightpaths:

a = str(root.val) + "->" + str(path)

if(len(paths)==0):

return paths

翻轉鍊錶

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

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class solution:

# 返回listnode

def reverselist(self, phead):

# write code here

if not phead or not phead.next:

return phead

head=phead

pre=none

while head:

next=head.next

head.next=pre

pre=head

head=next

return pre

#遞迴版本字串反轉

def func(s):

if len(s) <1:

return s

return func(s[1:])+s[0]

#非遞迴

str[::-1]

iOS面試常見題

1.耶穌有13個門徒,其中有乙個就是出賣耶穌的叛徒,請用排除法找出這位叛徒 13個人圍坐一圈,從第乙個人開始迴圈報數,數到三排除,最後剩下的人就是叛徒 int people 13 int count 0 用來記錄報數 int number 13 記錄活著的人數 int i 0 記錄第幾個人正在報數 ...

Python爬蟲工程師面試常見題

一.專案問題 一般面試官的第乙個問題八成都是問一下以前做過的專案,所以最好準備兩個自己最近寫的有些技術 含量的專案,當然一定要自己親手寫過的,在別的地方看的原始碼,就算看的再清楚,總歸沒有自己敲的 了解的多。以下是抽出的幾點 1.你寫爬蟲的時候都遇到過什麼反爬蟲措施,你是怎麼解決的 2.用的什麼框架...

JS面試常見演算法題

學習資料結構與演算法對於工程師去理解和分析問題都是有幫助的。如果將來當我們面對較為複雜的問題,這些基礎知識的積累可以幫助我們更好的優化解決思路。下面羅列在前端面試中經常撞見的幾個問題吧。1.統計乙個字串出現最多的字母和出現的次數 第一種方法 var str abcdeddd var n for va...