1. 程式人生 > >n個整數中找出連續m個數加和是最大Python版

n個整數中找出連續m個數加和是最大Python版

最近在看資料時看到了一個如標題所示的面試題,面試題是Java版,正好最近在學Python,就先用Python實現了。畢竟life is short,use python(玩笑話,演算法設計思路是共同的,每種語言的實現方式都大同小異)。

分析: m個連續的整數加和是最大,那麼最簡單的實現方式就是:從下標為0查詢m個元素,依次n個數組成的容器進行遍歷,每次遍歷判斷當前最大的m個數之和,遍歷結束後返回。

#原始資料
a = (133,445,6768,23,656,12305,768,234,787,6321,5677,234,1445,3551,547,3245,12357)

def maxseq(seq,m):
    # 斷言:確保形參型別準確,其中序列形式可以是列表、元組、集合形式
    assert isinstance(seq,(list,tuple,set)) and isinstance(m,int),"seq must list,tuple,set and m must int"
    assert len(seq) > m, "len(seq) must >m"

    # 將序列轉化為列表
    seq = list(seq)

    # 解包的方式定義兩個列表(java中的陣列)容器
    #tempseq 存放臨時資料,mxseq存放最大資料
    tempseq ,mxseq = [],[]

    # 取出當前的列表的長度,避免每次迴圈執行此方法一次,優化程式
    lens = len(seq)

    #從下標為0開始遍歷
    for i in range(0,lens):

        #避免下標越界
        if (i+m) <= lens:

            #對連續的m個數進行切片,存放到臨時列表
            tempseq = seq[i:i+m]

            #判斷的邏輯是: 當(mxseq為空)或者(mxseq不為空並且mxseq加和小於tempseq加和)
            if (not mxseq) or (mxseq and (sum(mxseq) < sum(tempseq))):

                #mxseq改變
                mxseq = tempseq[:]
    # for迴圈正常結束返回mxseq
    else:
        return mxseq

print(maxseq(a,5))
註釋已經寫的很清楚,就不在進行詳細的解釋了。初學python並且對演算法知識也是一知半解,如果你有好的建議,可不要吝嗇哦!

相關推薦

n整數連續m個數Java

即上一篇Python版取連續加和最大的整數後,本篇部落格帶來Java版取連續加和最大的整數。總體的思路入上一次部落格中所述,就不在過多的闡述,關鍵就在於如何應用Java API寫出相同邏輯的程式碼。

n整數連續m個數Python

最近在看資料時看到了一個如標題所示的面試題,面試題是Java版,正好最近在學Python,就先用Python實現了。畢竟life is short,use python(玩笑話,演算法設計思路是共同的

javascript實現:在N字串長的公子串

  1 'use strict' 2 3 function 找出最長公子串 (...strings) { 4 let arraiesOfSubStrings = [] 5 arrayOfStrings.reduce((accumulator, currentVal

輸入n整數其中小的K個數

vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { int len=input.si

輸入n整數其中小的K個數。例如輸入4,5,1,6,2,7,3,8這8數字,則小的4數字是1,2,3,4,。

解題思路: 1、最簡單方法,先排序,再取前k個,時間複雜度O(NlogN) class Solution { public: vector<int> GetLeastNumbers

23.輸入n整數其中小的K個數。例如輸入4,5,1,6,2,7,3,8這8數字,則小的4數字是1,2,3,4,。

題目:輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。 import java.util.ArrayList; public

N整數的K個數

《尋找N個元素中的前K個最大者》方法總結是在這裡看到的 /algorithm/20111105/314362.html ,我覺得解法二和解法四用得廣泛一些,程式設計實現了一下。 利用快速排序中的partition操作 經過partition後,pivot左邊的序列sa都大於pivot右邊的序列sb;

python兩種方法實現從1000萬隨機數top n元素(附c語言)

轉載請註明地址:http://blog.csdn.net/echoutopia/article/details/51731269 很早之前看到一道面試題: 有一個長度為1000w個數組,每個元素互不重複,找出其中top n元素。 我感覺重複或者不重複都差不多,所以沒管不重複

100億整數位數

100億個整數,記憶體足夠,如何找到中位數?記憶體不足,如何找到中位數? (1)當記憶體足夠時: 採用快排,找到第n大的數。 • 隨機選取一個數,將比它小的元素放在它左邊,比它大的元

n整數1出現的次數

sin num 描述 str mil 需要 數據 暴力求解 最大 整數中1出現的次數(從1到n整數中1出現的次數) (兩種方法:1、規律。2暴力求解) 題目描述 求出1 ~ 13的整數中1出現的次數,並算出100 ~ 1300的整數中1出現的次數?為此他特別數了一下1 ~

作業題:輸入4整數其中的數。用一個函數來實現. 分別使用結構化方法函數嵌套的方法。

system 是否 進行 如果 div 使用 clu 函數 整型 之前在main()函數中的思路是: #include <iostream> using namespace std; int main(){ //求四個數中最大的數? /

輸出4整數其中的數。用函數嵌套調用來處理

函數返回值 integer return 另一個 pos 結果 圖片 個數 數值 /* p183 例7.5 輸出4個整數,找出其中最大的數。用函數嵌套調用來處理 解題思路:這個問題並不復雜,完全可以只用一個主函數就可以得到結果。在main函數中調用max4函數,max4函數

字串連續長的數字串

讀入一個字串str,輸出字串str中的連續最長的數字串  輸入描述: 個測試輸入包含1個測試用例,一個字串str,長度不超過255。 輸出描述: 在一行內輸出str中裡連續最長的數字串。

資料結構與演算法——有1億整數的1000,要求時間越短越好,空間佔用越少越好

有1億個整數,找出最大的1000個,要求時間越短越好,空間佔用越少越好(迅雷筆試) 首先要明白1億個整數佔用多大的記憶體,按每個整數4個位元組來算,用400000000B,大約400000KB,大約4

100億數字的10

1、首先一點,對於海量資料處理,思路基本上是:必須分塊處理,然後再合併起來。 2、對於每一塊必須找出10個最大的數,因為第一塊中10個最大數中的最小的,可能比第二塊中10最大數中的最大的還要大。 3、分塊處理,再合併。也就是Google MapReduce 的基本思想。Google有很多的伺服器,每個伺服器

從1億ip訪問次數多的IP

問題一:怎麼在海量資料中找出重複次數最多的一個演算法思想:方案1:先做hash,然後求模對映為小檔案,求出每個小檔案中重複次數最多的一個,並記錄重複次數。        然後找出上一步求出的資料中重複次數最多的一個就是所求(如下)。問題二:        網站日誌中記錄了使用

BAT面試上機題從3億ip訪問次數多的IP詳解

我們面臨的問題有以下兩點:1)資料量太大,無法在短時間內解決;2)記憶體不夠,沒辦法裝下那麼多的資料。而對應的辦法其實也就是分成1)針對時間,合適的演算法+合適的資料結構來提高處理效率;2)針對空間,就是分而治之,將大資料量拆分成多個比較小的資料片,然後對其各個資料片進行處理,最後再處理各個資料片的結果。原文

編寫程式從鍵盤得到三整數其中的大數

為了更加了解指標,此次採用指標來判斷大小 從鍵盤輸入三個整數,除了宣告外不允許出現整數型別變數 #include<stdio.h> int main(void){ int num1 = 0,num2 = 0,num3 = 0; int *p_nu

Linux-C基礎知識學習:C語言作業-輸入10整數其中小值

Linux基礎知識學習 C語言作業:輸入10個整數,找出其中最大值和最小值 //讀10個整數存入陣列,找出其中最大值和最小值 #include <stdio.h> main(){ p

n個數m個數

引子每年十一月各大IT公司都不約而同、爭後恐後地到各大高校進行全國巡迴招聘。與此同時,網上也開始出現大量筆試面試題;網上流傳的題目往往都很精巧,既能讓考查基礎知識,又在平淡中隱含了廣闊的天地供優秀學生馳騁。 這兩天在網上淘到一1道筆試題目(注1),雖然真假未知,但的確是道好題