算法面試題匯總(更新中)

1、根據數字返回相應位置數字?

def get_digit(num, i):# i=0 個位 1 十位 2 百位...return num // (10 ** i) % 10# print(get_digit(12345, 6))

2、列表反轉,不用內置函數

def reverse_list(li):n = len(li)for i in range(n // 2):li[i], li[n-i-1] = li[n-i-1], li[i]return li# print(reverse_list([1,2,3,4,5,6]))

?3、數字反轉,不用切片,不用內置函數

# 123->321 12300->321
def reverse_int(num):is_neg = Falseif num < 0:is_neg = Truenum = -1 * numres = 0while num > 0:res = res * 10res += num % 10num = num // 10if is_neg:res = res * -1return res# print(reverse_int(-123001))

4、數字轉列表

def int2list(num):li = []while num > 0:li.append(num % 10)num = num // 10li.reverse()return li# print(int2list(123456))

5、一段n個臺階組成的樓梯,小明從樓梯的最底層向最高層處前進,他可以一次邁一階或兩階,問:他有多少種不同的走法?

def func(n):if n==0 or n==1:return 1else:return f(n-1)+f(n-2)

6、按照單詞反轉給定句子。例如,輸入"what is your name",返回"name your is what"。請不要使用諸如''.split, [::-1]等時間/空間復雜度不是O(1)的函數

def str_reverse(str,i,j):while i<j:str[i],str[j]=str[j],str[i]i+=1j-=1
def sentence_reverse(sentence):sent_list = list(sentence)i=0len_list = len(sent_list)while i<len_list:if sent_list[i] !=' ':start = iend=start+1while (end<len_list) and (sent_list[end]!=' '):end += 1str_reverse(sent_list,start,end-1)i = endelse:i+=1sent_list.reverse()return(''.join(sent_list))

棧,隊列相關

括號匹配問題:給一個字符串,其中包含小括號、中括號、大括號,求該字符串中的括號是否匹配

def brace_match(s):stack = []d = {'(':')', '[':']', '{':'}'}for ch in s:if ch in {'(', '[', '{'}:stack.append(ch)elif len(stack) == 0:print('多了右括號%s' % ch)return Falseelif d[stack[-1]] == ch:stack.pop()else:print('括號%s處不匹配' % ch)return Falseif len(stack) == 0:return Trueelse:print("剩余左括號未匹配")return Falseprint(brace_match('[]{{}[]{()})}'))

用兩個棧實現隊列

class QueueStack(object):def __init__(self):self.l1 = []self.l2 = []def push(self,a):self.l1.append(a)def pop(self):if not self.l2:for i in range(len(self.l1)):a = self.l1.pop()self.l2.append(a)if self.l2:return self.l2.pop()else:return False

一行代碼模擬 Linux 中的 tail

# import queue # 不能設置大小
from collections import deque# q = deque()  # 雙向隊列,可以設置大小,超過大小,后進隊的數據會使前進隊的數據被丟掉
# q.append(1)
# q.append(2)
# q.append(3)
# print(q.popleft())
# head tail# print(deque(open('test.txt', 'r', encoding='utf-8'), 5))

?給兩個字符串st,判斷t是否為s的重新排列后組成的單詞:

  • ns?= "anagram",?t?= "nagaram", return true.
  • ns?= "rat",?t?= "car", return false.
class Solution:def isAnagram(self, s, t):dict1 = {}   # 用字典來維護字符的數量dict2 = {}for ch in s:dict1[ch] = dict1.get(ch, 0) + 1   # 沒有就新建,有就加1for ch in t:dict2[ch] = dict2.get(ch, 0) + 1return dict1 == dict2"""
輸入:"anagram","nagaram"
輸出:true
Runtime: 32 ms
"""

給定一個m*n的二維列表,查找一個數是否存在。

  列表有下列特性:

  • 每一行的列表從左到右已經排序好。
  • 每一行第一個數比上一行最后一個數大。
  • leetcode地址:https://leetcode.com/problems/search-a-2d-matrix/description/

  

class Solution:def searchMatrix(self, matrix, target):h = len(matrix)  # 高if h == 0:return Falsew = len(matrix[0])  # 列if w == 0:return Falseleft = 0right = w * h - 1while left  <= right:mid = ((left + right)) // 2i = mid // wj = mid % w  if matrix[i][j] == target:return Trueelif matrix[i][j] > target:right = mid - 1else:left = mid + 1else:return False

給定一個列表和一個整數,設計算法找到兩個數的下標,使得兩個數之和為給定的整數。保證肯定僅有一個結果。

  • leetcode地址:https://leetcode.com/problems/two-sum-ii-input-array-is-sorted/description/
  • 例如,列表[1,2,5,4]與目標整數3,1+2=3,結果為(0,1).
# [2,1,3,5] 4
# 第一種:循環 O(n^2)
def two_sum_1(li, num):for i in range(len(li)):for j in range(len(li)):if i != j:if li[i] + li[j] == num:return i, jreturn -1,-1# 循環減半O(n^2)
def two_sum_1_1(li, num):for i in range(len(li)):for j in range(i+1, len(li)):if li[i] + li[j] == num:return i, jdef bin_search(li, val, low, high):while low <= high:  # 只要候選區不空,繼續循環mid = (low + high) // 2if li[mid] == val:return midelif li[mid] < val:low = mid + 1else:  # li[mid] > valhigh = mid - 1return -1# 第二種:固定一個,查找一個,查找用二分,要求有序 O(nlogn)
def two_sum_2(li, num):for i in range(len(li)):a = li[i]b = num - aj = bin_search(li, b, i+1, len(li)-1)if j >= 0:return i, j# 第三種:左右互搏,要求有序 O(n)
def two_sum_3(li, num):i = 0j = len(li)-1while i < j:s = li[i] + li[j]if s == num:return i, jelif s < num:i += 1elif s > num:j -= 1return -1,-1# 第四種:用字典,字典是O(1),不要求有序 O(n)
def two_sum_4(li, num):dic = {}for i in range(len(li)):a = li[i]b = num - li[i]if b not in dic:dic[a] = ielse:return dic[b], i# 2-sum問題
# 無序列表: 4哈希表(最優)
# 有序列表: 3兩邊找(最優)# 3-sum問題
# 1.暴力枚舉法 O(n^3)
# 2.二分查找   O(n^2logn)
# 3.兩邊找     O(n^2) (最優,不占空間)
# 4.哈希表     O(n^2) (次優)# 2-sub問題
# 哈希表    O(n) 定住一個找兩個

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454240.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454240.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454240.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在python中os_在Python中使用os.execvp

我有一個關于在 Python中使用os.execvp的問題.我有以下用于創建參數列表的代碼&#xff1a; args [ "java" , classpath , "-Djava.library.path" lib_path() , ea , "-Xmx1000m" , "-server" , "code_swarm" , params ] …

WEBGL學習【四】模型視圖矩陣

<html lang"zh-CN"><!--服務器運行地址&#xff1a;http://127.0.0.1:8080/webgl/LearnNeHeWebGL/NeHeWebGL4.html--> <head><title>NeHes WebGL</title><meta charset"UTF-8"/><!--引入需要的庫文件--><scr…

使用Jmeter對mysql進行性能測試入門

使用Jmeter對mysql進行性能測試入門 第一步&#xff1a;測試環境準備&#xff1a; 1&#xff09;、mysql> select version(); ----------- | version() | ----------- | 5.5.13 | ----------- ms數據庫數據&#xff1a; mysql> select count(*) from account; ----------…

算法基礎之數據結構

whats the 數據結構 數據結構是指相互之間存在著一種或多種關系的數據元素的集合和該集合中數據元素之間的關系組成。 簡單來說&#xff0c;數據結構就是設計數據以何種方式組織并存儲在計算機中。 比如&#xff1a;列表、集合與字典等都是一種數據結構。 通常情況下&#xff…

soap接口怎么不返回tuple python_Python 中的接口

Python 是動態類型語言, 只在運行時做 Duck Typing 檢查.利: 靈活, 方便弊: 代碼混亂, 缺少規范標準自帶兩類接口支持: abc 和 typing.Protocol, 有他們協助給天馬行空的程序員套上枷鎖, Python 的大工程才可以"上道"abcabc 就是 Abstract Base Class, 虛基類. 跟 Ja…

java 第11次作業:你能看懂就說明你理解了——this關鍵字

this 代表當前對象 轉載于:https://www.cnblogs.com/qingyundian/p/7736699.html

c#多線程操作界面控件的簡單實現

一個小功能&#xff0c;早有人實現了。自己在一個項目中用到&#xff0c;覺得有必要記錄一下&#xff0c;寫下來。代碼 從上面你可能已經看出如何多線程操作同一個控件的&#xff0c;就是通過一個委托&#xff0c;然后定義委托方法&#xff0c;判斷控件的InvokeRequired屬性&am…

ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法

利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序&#xff0c;后來又迅速擴展到其他操作平臺。1 什么是SSH引用百度百科的說明:SSH 為 Secure Shell的縮寫&#xff0c;由 IETF 的網絡小組(Network Working Group)所制定&#xff1b;它是…

Python 第三方模塊之 NumPy - 科學計算

NumPy 簡介 NumPy 發展歷史 1995年 Jim HugUNin開發了Numeric。隨后&#xff0c;Numarray包誕生。Travis Oliphants整合Numeric和Numarray&#xff0c;開發Numpy&#xff0c;于2006年發布第一個版本。Numpy&#xff08;Numeric Python&#xff09;提供了許多高級的數值編程工…

keepalived與lvs結合使用配置實例

keepalived可以實現兩大功能是&#xff1a;健康檢測和故障轉移 keepalived.conf的配置 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950global_defs {notification_email { acassenfirewall.loc failoverfirewall.loc sysadminf…

保證你現在和未來不失業的十種關鍵技術

在當今的IT就業市場&#xff0c;有人歡喜有人憂。有人對目前的工作和薪水很滿意&#xff0c;有人目前正面臨著下崗&#xff0c;或者已經下崗…… 可能你是公司里唯一諳熟某項關鍵技術的高手&#xff0c;缺了你&#xff0c;公司便玩不轉了&#xff1b;也可能你所在的公司對你現…

python設置時間步長與時間離散格式_python怎么定義時間

Python 的 Decorator在使用上和Java/C#的Annotation很相似&#xff0c;就是在方法名前面加一個XXX注解來為這個方法裝飾一些東西。但是&#xff0c;Java/C#的Annotation也很讓人望而卻步&#xff0c;太TMD的復雜了&#xff0c;你要玩它&#xff0c;你需要了解一堆Annotation的類…

Python 第三方模塊之 matplotlib - 繪圖庫

簡介 matplotlib是受MATLAB的啟發構建的。MATLAB是數據繪圖領域廣泛使用的語言和工具。MATLAB語言是面向過程的。利用函數的調用&#xff0c;MATLAB中可以輕松的利用一行命令來繪制直線&#xff0c;然后再用一系列的函數調整結果。 matplotlib有一套完全仿照MATLAB的函數形式…

python 筆記(三) 斷言(assert)

用來調試程序的時候用&#xff0c;當程序有誤時&#xff0c;強制拋出異常轉載于:https://www.cnblogs.com/wangkeblog/p/7746022.html

網站程序員的程序員成長之路大概分幾個階段 和未來的發展

信息技術的更新速度是驚人的&#xff0c;程序員的職業生涯則是一個要求不斷學習的過程&#xff0c;如何才能成為一名合格的程序員&#xff0c;一名合格的程序員需要掌握哪些技能呢&#xff1f;為此天天招生網采訪到幾位孳生的程序工作人員&#xff0c;就如何做好一名成功的程序…

微軟P2V工具之Disk2VHD

虛擬化經過最近幾年的發展&#xff0c;已經有很多的應用和服務遷移到了虛擬化的平臺上了。在實施虛擬化的過程中就會涉及到將原來老舊的服務器來遷移到虛擬化平臺的運行&#xff0c;這就是P2V&#xff0c;物理機轉換為虛擬機。談到P2V大家會想到很多的工具&#xff0c;例如Vmwa…

生成n套數位加減乘除_leetcode 算法匯總(四)位運算

一、 運算符& 與運算&#xff1a; 兩個位都是 1 時&#xff0c;結果才為 1&#xff0c;否則為 0| 或運算&#xff1a; 兩個位都是 0 時&#xff0c;結果才為 0&#xff0c;否則為 1^ 異或運算&#xff1a; 兩個位相同則為 0&#xff0c;不同則為 1~ 取反運算&#xff1a;0 …

機器學習算法之 K-means、層次聚類,譜聚類

k-means 和層次聚類都屬于劃分聚類&#xff0c;實際中最常用的是k-means&#xff0c;k-means效果不好的情況下才會采用其他聚類 K-means算法 K-means算法&#xff0c;也稱為K-平均或者K-均值&#xff0c;是一種使用廣泛的最基礎的聚類算法 假設輸入樣本為TX1,X2,…,Xm;則算法…

vue數據請求

我是vue菜鳥&#xff0c;第一次用vue做項目&#xff0c;寫一些自己的理解&#xff0c;可能有些不正確&#xff0c;歡迎糾正。 vue開發環境要配置本地代理服務。把config文件加下的index.js里的dev添加一些內容&#xff0c; dev: {env: require(./dev.env),port: 8090,autoOpenB…

jetty部署多個web應用及將jetty配置成服務

通常情況下一個jetty部署一個java web應用&#xff0c;但一臺服務只部署一個應用可能會造成資源浪費&#xff0c;所以有時候可能在一臺服務器上要部署多個web應用。下面我們以一臺server部署兩個web應用為例。 服務器環境&#xff1a;安裝JDK&#xff0c;2個jetyy9 重點&#x…