n個整數中找出連續m個數加和是最大Python版
最近在看資料時看到了一個如標題所示的面試題,面試題是Java版,正好最近在學Python,就先用Python實現了。畢竟life is short,use python(玩笑話,演算法設計思路是共同的,每種語言的實現方式都大同小異)。
分析: m個連續的整數加和是最大,那麼最簡單的實現方式就是:從下標為0查詢m個元素,依次n個數組成的容器進行遍歷,每次遍歷判斷當前最大的m個數之和,遍歷結束後返回。
註釋已經寫的很清楚,就不在進行詳細的解釋了。初學python並且對演算法知識也是一知半解,如果你有好的建議,可不要吝嗇哦!#原始資料 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))
相關推薦
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),雖然真假未知,但的確是道好題