日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

经典算法题总结

發(fā)布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 经典算法题总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第一題:遞歸

  1.給一個dict或者json 求 value大于53 并且為int 將該value 轉(zhuǎn)換為str

  

mydict1 = {"a":{"a":[1,2,3]},"b":{"b":1}}def Foo(mydict):for _,v in mydict.items():if isinstance(v,dict):Foo(v)elif isinstance(v,int) and ord(v) > 53:v = str(v)elif isinstance(v,list):for i in v :Foo(i)elif isinstance(v,tuple):for i in v:Foo(i)

  

第二題:邏輯

  2. 給一個數(shù)組 [7,3,5,6,4]? 最大值不能在比他小的值前面,求最大值和最小值的差?

?

a = [7,3,5,6,4]big = 0 small = 0 index = 0 for i in a:if small == 0:small = iif i > big:if index+1 == len(a):if i > big:big = ielif i > a[index+1]:passelse:big = iif i < small:small = iindex += 1 #0 1 2over = big - smallprint(over)

 按照這種姿勢求:

 ?

?

第三題:python生成器

#!/usr/bin/python # -*- coding:utf-8 -*- i = [1,2,3,4]u = (j for j in i)#通過列表生成式,變成了個生成器print(u,type(u))""" <generator object <genexpr> at 0x10457af10> <class 'generator'> """

?

第四題:單例模式

import threadingimport time class singleclass(object):_instance_lock = threading.Lock()def __init__(self):time.sleep(1) #加入sleep之后就看出來內(nèi)存地址不一致,這種情況需要考慮加鎖解決@classmethoddef instance(cls,*args,**kwargs):if not hasattr(singleclass,"_instance"):with singleclass._instance_lock:if not hasattr(singleclass,"_instance"):singleclass._instance = singleclass(*args,**kwargs)return singleclass._instancedef task():obj = singleclass.instance()print(obj)for i in range(100):t = threading.Thread(target=task)t.start()

 基于裝飾器的單例模式:

#!/usr/bin/python # -*- coding:utf-8 -*- import threadingdef Singleton(cls):_instance_lock = threading.RLock()_instance = {}def _singleton(*args,**kwargs):if cls not in _instance:with _instance_lock:_instance[cls] = cls(*args,**kwargs)return _instance[cls]return _singleton@Singleton class A(object):a = 1def __init__(self, x=0):self.x = xa1 = A(2) a2 = A(3) print(id(a1))print(id(a2))print(a1.x)print(a2.x)

?

代碼解析:

代碼分析:第1行,創(chuàng)建外層函數(shù)singleton,可以傳入類第2行,創(chuàng)建一個instances字典用來保存單例第3行,創(chuàng)建一個內(nèi)層函數(shù)來獲得單例第4,5,6行, 判斷instances字典中是否含有單例,如果沒有就創(chuàng)建單例并保存到instances字典中,然后返回該單例第7行, 返回內(nèi)層函數(shù)get_instance#創(chuàng)建一個帶有裝飾器的類@singletonclass Student:def __init__(self, name, age):self.name = nameself.age = age在Python中認為“一切皆對象”,類(元類除外)、函數(shù)都可以看作是對象,既然是對象就可以作為參數(shù)在函數(shù)中傳遞,我們現(xiàn)在來調(diào)用Student類來創(chuàng)建實例,看看實現(xiàn)過程。#創(chuàng)建student實例student = Student(jiang, 25)@singleton相當于Student = singleton(Student),在創(chuàng)建實例對象時會先將 Student 作為參數(shù)傳入到 singleton 函數(shù)中,函數(shù)在執(zhí)行過程中不會執(zhí)行 get_instance 函數(shù)(函數(shù)只有調(diào)用才會執(zhí)行),直接返回get_instance函數(shù)名。此時可以看作Student = get_instance,創(chuàng)建實例時相當于student = get_instance(jiang, 25),調(diào)用get_instance 函數(shù),先判斷實例是否在字典中,如果在直接從字典中獲取并返回,如果不在執(zhí)行 instances [cls] = Student(jiang, 25),然后返回該實例對象并賦值非student變量,即student = instances[cls]。

?

第五題 super解析:

class BaseResponse(object):def __init__(self):print(123)class LikeResponse(BaseResponse):def __init__(self):self.code = 0super(LikeResponse,self).__init__()#執(zhí)行父類的__init__()方法if __name__ == '__main__':g = LikeResponse()""" 123"""

  

第六題 linux shell 腳本中冒號的意思(:)

: 在shell里是什么都不做,但返回值為真 例如 while :; docommand done或者for i in `seq 1 10`; do: done 此處相當于python里的pass

  

第七題: linux shell腳本中?

ETCD_NAME=${1:-"default"} #如果$1沒傳遞數(shù)據(jù) 默認值就是default ETCD_LISTEN_IP=${2:-"0.0.0.0"} ETCD_INITIAL_CLUSTER=${3:-}

?

第八題:python 列表引用類型

def f(x,l=[]):for i in range(x):l.append(i*i)print(l)f(2) f(3,[1,2,3]) f(3)""" [0, 1] [1, 2, 3, 0, 1, 4] [0, 1, 0, 1, 4] """

  

?第九題:二分查找非遞歸方法

二分查找:
我們手里有一個長度為n的正序數(shù)列,當我們想查找一個數(shù) x是否在這個數(shù)列當中的時候
1 取數(shù)列正中間的數(shù)mid,
如果mid和x相等,則找到結(jié)果,查找成功 返回True
如果mid比x大,則x應(yīng)該在mid的左側(cè),我們把mid左側(cè)當作一個新的數(shù)列l(wèi)i
如果mid比x小,則x應(yīng)該在mid的右側(cè),我們把mid右側(cè)當作一個新的數(shù)列l(wèi)i
2 對于新的數(shù)列l(wèi)i 進行1的查找工作

3 一直重復(fù)上面查找,生成新的數(shù)列l(wèi)i為空的時候則 數(shù)列當中沒有數(shù)x 返回False

時間復(fù)雜度:最優(yōu)O(1) 我們?nèi)〉谝淮沃虚g數(shù)mid 找到了 這種概率很低
最壞O(log n) 假設(shè)n個數(shù)的數(shù)列,每次把數(shù)列分成兩半,n除以多少次2 等于1 呢? log n次

遞歸實現(xiàn)二分法查找 #遞歸實現(xiàn)二分查找 li是列表 item是要查找的元素 def merge_search( li ,item ):#傳來的列表每次都是新生成的,如果發(fā)現(xiàn)里面沒有元素,則是查找到盡頭都沒找到if not li :return Falsemid = len(li)//2 #mid記錄li的中間位置#檢查一下 如果中間這個數(shù)就是要找的元素 返回真if li[mid] == item :return True# 如果mid比item大,說明item可能會出現(xiàn)在mid左邊,對左邊再查找elif li[mid]> item :return merge_search( li[:mid] ,item )# mid 比item小,說明item有可能在mid右邊,對右邊再查找else :return merge_search( li[mid+1:] , item )if __name__ == '__main__':li = [1,2,3,4,5,6,7]print( merge_search(li , 0) ) #Falseprint( merge_search(li , 1) ) #True

  

?非遞歸查詢

def merge_search( li , item ):#獲取li的開始 結(jié)束start = 0end = len(li)-1#只要start和end 還沒錯開 就一直找while start <= end :#通過計算獲取當前查找范圍的中間位置mid = (start + end)//2#如果中間數(shù)就是item則返回Trueif li[mid] == item :return True#如果mid比item大,說明item可能會出現(xiàn)在mid左邊,對左邊再查找elif li[mid]> item :end = mid - 1# mid 比item小,說明item有可能在mid右邊,對右邊再查找else :start = mid + 1#跳出循環(huán)說明沒找到 返回錯誤return Falseif __name__ == '__main__':li = [1,2,3,4,5,6,7,8]print( merge_search(li , 8) ) #Trueprint( merge_search(li , 0) ) #False

  

?算法題:

兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單。

import itertoolsfor i in itertools.permutations('xyz'):if i[0] != 'x' and i[2] != 'x' and i[2] != 'z':print('a vs %s, b vs %s, c vs %s' % (i[0], i[1], i[2]))

?

求一個字符串最長不重復(fù)子串

#!/usr/bin/python # -*- coding:utf-8 -*-def max_string(st):# 設(shè)置一個result list + 一個max# 考察的問題,如果對中間list 進行截取,這個時候要考慮,我截取完的list# 要將新數(shù)據(jù)append進去,然后在去求一下,長度和max去比較,只有大于max才可以存到最終的結(jié)果里tmp = []result = []max_len = 0for i in st:if i in result:if result.index(i) == len(result) -1:result = []result.append(i)if len(result) > max_len:max_len = len(result)tmp = resultelse:result = result[result.index(i)+1:]result.append(i)if len(result) > max_len:max_len = len(result)tmp = resultelse:result.append(i)if len(result) > max_len:max_len = len(result)tmp = resultprint(tmp)if __name__ == '__main__':st = "abcadefdhigkg"max_string(st)""" output ['e', 'f', 'd', 'h', 'i', 'g', 'k']"""

  

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/liujiliang/p/9176961.html

總結(jié)

以上是生活随笔為你收集整理的经典算法题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。