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

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

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

public class MaxArray {
	public static void main(String[] args) {
		// int[] 陣列 asList返回 int[];形式List物件 
		Integer[] paras = { 133, 445, 6768, 23, 656, 123105, 768, 234,
				787, 6321, 5677, 234, 1445, 3551, 547, 3245, 12357 };
		//引用型別的陣列轉化為集合
		List<Integer> lists = Arrays.asList(paras);
		int n = 6;
		
		//將集合轉化為陣列
		System.out.println(getArray((Integer[])lists.toArray(),n));
		System.out.println(getArray(paras, n));
	}

	public static <T> String getArray(Integer[] params, int n) {
		// 宣告maxs,初始化temp
		Integer[] maxs = null, temp = null;
		if (!(params instanceof Integer[])) {
			return "引數型別錯誤";
		}
		temp = new Integer[n];
		maxs = new Integer[n];
		int len = params.length;
		for (int i = 0; i < len; i++) {
			if (i + n <= len) {
				// 陣列複製 相當於切片
				System.arraycopy(params, i, temp, 0, n);
				if (maxs[0] == null
						|| (maxs[0] != null && (getSum(maxs) < getSum(temp)))) {
					// 引用相同 不可使用 maxs = temp;
					// 從temp複製一份給maxs
					System.arraycopy(temp, 0, maxs, 0, n);
				}
			}
		}
		// 將陣列以字元列印
		return Arrays.toString(maxs);
	}
	//取陣列或者集合的加和
	public static <T> int getSum(T t) {
		
		int sum = 0;
		if (t instanceof List<?>) {
			List<?> temp = (List<?>) t;
			int len = temp.size();
			for (int i = 0; i < len; i++) {
				sum += (Integer)temp.get(i);
			}
		} else if (t instanceof Integer[]) {
			Integer[] temp = (Integer[]) t;
			for (int i = 0; i < temp.length; i++) {
				sum += temp[i];
			}
		}
		return sum;
	}

}
如程式碼所示,Java底層資料結構多由陣列實現的,並且在System庫中提供了陣列複製的本地方法arraycopy,可以輕鬆的將改變屬性的引用。使用Arrys.asList()方法和list.toArray()可以輕鬆的實現陣列到集合之間的相互切換。

相關推薦

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),雖然真假未知,但的確是道好題