13道Python数组练习题
1、二維數(shù)組的查找:
在一個(gè)二維數(shù)組中(每個(gè)一維數(shù)組的長(zhǎng)度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請(qǐng)完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù),判斷數(shù)組中是否含有該整數(shù)。
class Solution:def Find(self, target, array):rows = len(array)-1cols = len(array[0])-1i = rowsj = 0while i >= 0 and j <= cols:if target < array[i][j]:i -= 1elif target > array[i][j]:j += 1else:return Truereturn False2、旋轉(zhuǎn)數(shù)組的最小數(shù)字
把一個(gè)數(shù)組最開(kāi)始的若干個(gè)元素搬到數(shù)組的末尾,我們稱(chēng)之為數(shù)組的旋轉(zhuǎn)。 輸入一個(gè)非減排序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。 例如數(shù)組{3,4,5,1,2}為{1,2,3,4,5}的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1。 NOTE:給出的所有元素都大于0,若數(shù)組大小為0,請(qǐng)返回0。
class Solution:def minNumberInRotateArray(self, rotateArray):lens = len(rotateArray)if lens == 0:return 0elif lens == 1:return rotateArray[0]else:left = 0right = lens-1while left < right:mid = (left+right)//2if rotateArray[mid] <= rotateArray[right]:right = midelse:left = mid+1return rotateArray[right]3、斐波那契數(shù)列
大家都知道斐波那契數(shù)列,現(xiàn)在要求輸入一個(gè)整數(shù)n,請(qǐng)你輸出斐波那契數(shù)列的第n項(xiàng)(從0開(kāi)始,第0項(xiàng)為0)。
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Solution:def Fibonacci(self, n):fib = [0,1]if n <= 1:return fib[n]while len(fib)<=n:fib.append(fib[-1]+fib[-2])return fib[n]4、跳臺(tái)階
一只青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2級(jí)。求該青蛙跳上一個(gè)n級(jí)的臺(tái)階總共有多少種跳法(先后次序不同算不同的結(jié)果)。
class Solution:def jumpFloor(self, number):ways = [1,2]if number <= 2:return ways[number-1]while len(ways)<=number:ways.append(ways[-1]+ways[-2])return ways[number-1]5、變態(tài)跳臺(tái)階
這道題純粹是為了和前一題對(duì)比,放在數(shù)組這篇博客里。一只青蛙一次可以跳上1級(jí)臺(tái)階,也可以跳上2級(jí)……它也可以跳上n級(jí)。求該青蛙跳上一個(gè)n級(jí)的臺(tái)階總共有多少種跳法。
class Solution:def jumpFloorII(self, number):if number <=1:return numberelse:way = 1for i in range(2,number+1):way *= 2return way6、矩形覆蓋
和斐波那契數(shù)列的思路差不多。我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請(qǐng)問(wèn)用n個(gè)21的小矩形無(wú)重疊地覆蓋一個(gè)2*n的大矩形,總共有多少種方法?
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Solution:def rectCover(self, number):ways = [0,1,2]if number <= 2:return ways[number] else:while len(ways) <= number:ways.append(ways[-1]+ways[-2])return ways[number]7、數(shù)值的整數(shù)次方
給定一個(gè)double類(lèi)型的浮點(diǎn)數(shù)base和int類(lèi)型的整數(shù)exponent。求base的exponent次方。
# -*- coding:utf-8 -*- class Solution:def Power(self, base, exponent):temp = 1if base == 0: return 0elif base != 0 and exponent == 0:return 1elif base!= 0 and exponent > 0:for i in range(exponent):temp *= basereturn tempelse:for i in range(-exponent): temp *= 1./ base return temp8、調(diào)整數(shù)組順序使奇數(shù)位于偶數(shù)前面
輸入一個(gè)整數(shù)數(shù)組,實(shí)現(xiàn)一個(gè)函數(shù)來(lái)調(diào)整該數(shù)組中數(shù)字的順序,使得所有的奇數(shù)位于數(shù)組的前半部分,所有的偶數(shù)位于數(shù)組的后半部分,并保證奇數(shù)和奇數(shù),偶數(shù)和偶數(shù)之間的相對(duì)位置不變。
class Solution:def reOrderArray(self, array):if not array:return []odd_list = []even_list = []for i in array:if i % 2 != 0:odd_list.append(i)else:even_list.append(i)return odd_list+even_list9、順時(shí)針打印矩陣
輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
''' 遇到問(wèn)題沒(méi)人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書(shū)! ''' class Solution: def printMatrix(self, matrix):res = []while matrix:res += matrix.pop(0)if matrix and matrix[0]:for row in matrix:res.append(row.pop())if matrix:res += matrix.pop()[::-1]if matrix and matrix[0]:for row in matrix[::-1]:res.append(row.pop(0))return res10、數(shù)組中出現(xiàn)次數(shù)超過(guò)一半的數(shù)字
數(shù)組中有一個(gè)數(shù)字出現(xiàn)的次數(shù)超過(guò)數(shù)組長(zhǎng)度的一半,請(qǐng)找出這個(gè)數(shù)字。例如輸入一個(gè)長(zhǎng)度為9的數(shù)組{1,2,3,2,2,2,5,4,2}。由于數(shù)字2在數(shù)組中出現(xiàn)了5次,超過(guò)數(shù)組長(zhǎng)度的一半,因此輸出2。如果不存在則輸出0。
class Solution:def MoreThanHalfNum_Solution(self, numbers):if not numbers:return 0lens = len(numbers)count_freq = {}for i in numbers:if i not in count_freq:count_freq[i] = 1else:count_freq[i] += 1 for key,value in count_freq.items():if value > (lens//2):return keyreturn 011、連續(xù)子數(shù)組的最大和
HZ偶爾會(huì)拿些專(zhuān)業(yè)問(wèn)題來(lái)忽悠那些非計(jì)算機(jī)專(zhuān)業(yè)的同學(xué)。今天測(cè)試組開(kāi)完會(huì)后,他又發(fā)話了:在古老的一維模式識(shí)別中,常常需要計(jì)算連續(xù)子向量的最大和,當(dāng)向量全為正數(shù)的時(shí)候,問(wèn)題很好解決。但是,如果向量中包含負(fù)數(shù),是否應(yīng)該包含某個(gè)負(fù)數(shù),并期望旁邊的正數(shù)會(huì)彌補(bǔ)它呢?例如:{6,-3,-2,7,-15,1,2,2},連續(xù)子向量的最大和為8(從第0個(gè)開(kāi)始,到第3個(gè)為止)。給一個(gè)數(shù)組,返回它的最大連續(xù)子序列的和,你會(huì)不會(huì)被他忽悠住?(子向量的長(zhǎng)度至少是1)。
借鑒自然語(yǔ)言處理中的ngram的做法。
class Solution:def FindGreatestSumOfSubArray(self, array):def get_ngram(array):n = len(array)m = 1n_gram = [array[i-k:i] for k in range(m,n+1) for i in range(k,n+1)] return n_gramdef find_max(array):n_gram = get_ngram(array)sum_n_gram = [sum(i) for i in n_gram]max_sum = sum_n_gram[0]for i in sum_n_gram:if i >= max_sum:max_sum = ireturn max_sumif not array:returnelse:return find_max(array)12、把數(shù)組排成最小的數(shù)
輸入一個(gè)正整數(shù)數(shù)組,把數(shù)組里所有數(shù)字拼接起來(lái)排成一個(gè)數(shù),打印能拼接出的所有數(shù)字中最小的一個(gè)。例如輸入數(shù)組{3,32,321},則打印出這三個(gè)數(shù)字能排成的最小數(shù)字為321323。
這個(gè)題在python3環(huán)境下,要調(diào)用一個(gè)函數(shù)cmp_to_key。
from functools import cmp_to_key class Solution:def PrintMinNumber(self, numbers):if not numbers:return ''def compare(a,b):if a+b > b+a:return 1elif a+b < b+a:return -1else:return 0numbers = [str(i) for i in numbers]numbers.sort(key=cmp_to_key(compare))return ''.join(numbers).lstrip('0')13、丑數(shù)
把只包含質(zhì)因子2、3和5的數(shù)稱(chēng)作丑數(shù)(Ugly Number)。例如6、8都是丑數(shù),但14不是,因?yàn)樗|(zhì)因子7。 習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。求按從小到大的順序的第N個(gè)丑數(shù)。
這道題真是神題,暫時(shí)理解不了,抄別人的代碼。
class Solution:def GetUglyNumber_Solution(self, index):if index < 1:return 0res = [1]t2=t3=t5=0nextIdx = 1while nextIdx < index:minNum=min(res[t2]*2,res[t3]*3,res[t5]*5)res.append(minNum)if res[t2]*2 == minNum:t2 += 1if res[t3]*3 == minNum:t3 += 1if res[t5]*5 == minNum:t5 += 1nextIdx += 1return res[nextIdx-1]總結(jié)
以上是生活随笔為你收集整理的13道Python数组练习题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python必学内容:格式化输出的三种方
- 下一篇: Python字符串练习题