课堂练习--最大子数组和 环
一、設(shè)計思路
1、circle(int l)函數(shù)進行數(shù)組長度的輸入。
2、setArray()函數(shù)進行數(shù)組的輸入。
3、changeArray()函數(shù)將數(shù)組環(huán)轉(zhuǎn)化為數(shù)組列 此時求出的max為環(huán)的最大值
? ? 首先,將array[]數(shù)組的值賦值給sArray[]數(shù)組,進行原值儲存。然后for循環(huán)找出此數(shù)組的最小值。?
? ? ?然后在通過循環(huán)得到此最小值的位置。然后在將位置后的數(shù)賦值給新數(shù)組nArray數(shù)組前面,位置前的 ? ? ? 賦值給nArray后面,得到一個最小值在首位置的新數(shù)組。
4、
ArrayMax()函數(shù)實現(xiàn)求最大子數(shù)組的和。應(yīng)為復(fù)雜度為O(n),首先 輸入一個數(shù)組 如:
?-1 2 -1 -2 5 4 3 -6 8 9?
先定義一個新的數(shù)組cArray[],長度為11.然后初始化cArray[1]為0;for循環(huán)中 有
cArray[i+1] = cArray[i]+array[i];
所以新的數(shù)組為 :
0 -1 2 1 -1...
因為求最大值,所以判斷當(dāng)cArray[]小于0時,將5 賦值給新數(shù)組
即為:
0 -1 2 1 -1 5 9 12 6...
最后在得到的新數(shù)組中求出最大的值 此時這個值為最大的子數(shù)組和。
?
?源代碼:
1 import java.util.Scanner; 2 public class Array2 { 3 4 public static void main(String[] args) { 5 // TODO Auto-generated method stub 6 System.out.println("Please input your array length"); 7 Scanner c = new Scanner(System.in); 8 int cLength = c.nextInt(); 9 circle s = new circle(cLength); 10 s.setArray(); 11 s.changeArray(); 12 s.arrayMax(); 13 } 14 15 } 16 class circle 17 { 18 int array[];//原數(shù)組 19 int sArray[];//儲存原始數(shù)組 20 int nArray[];//轉(zhuǎn)換后的新數(shù)組 21 int cArray[];//最后得到的數(shù)組 22 int length;//數(shù)組長度 23 int max; 24 int min; 25 int position; 26 int i; 27 int m; 28 public circle(int l)//輸入數(shù)組長度 29 { 30 length = l; 31 } 32 33 void setArray()//輸入數(shù)組 34 { 35 System.out.println("Please input your array "); 36 array = new int [length]; 37 Scanner s = new Scanner(System.in); 38 for(int i=0;i<length;i++) 39 { 40 array[i]=s.nextInt(); 41 } 42 } 43 44 void changeArray()//將數(shù)組環(huán)轉(zhuǎn)換為數(shù)組列 此時求出的max為最大值 45 { 46 //儲存原數(shù)組 47 sArray = new int [length]; 48 for(i= 0;i<length;i++) 49 { 50 sArray[i] = array[i]; 51 } 52 53 //得到array數(shù)組中的最小值i 54 for(i=length-2;i>=0;i--) 55 { 56 if(array[i]<array[i+1]) 57 { 58 min = array[i]; 59 } 60 else if(array[i]>=array[i+1]) 61 { 62 m = array[i]; 63 array[i] = array[i+1]; 64 array[i+1] = m; 65 min = array[i]; 66 } 67 } 68 69 //找到最小值位置 70 for(i=0;i<length;i++) 71 { 72 if(sArray[i]==min) 73 { 74 position = i; 75 } 76 } 77 78 //得到新的數(shù)組 79 nArray = new int [length]; 80 for(i=0;i<length-position;i++) 81 { 82 nArray[i] = sArray[position+i]; 83 } 84 for(i=length-position;i<length;i++) 85 { 86 if(length-position-i>0) 87 { 88 nArray[i]=sArray[length-position-i]; 89 } 90 else if(length-position-i<=0) 91 { 92 nArray[i]=sArray[i+position-length]; 93 } 94 } 95 96 } 97 void arrayMax()//輸出最大值 98 { 99 cArray = new int [length+1]; 100 cArray[0] = 0; 101 for(i=0;i<length;i++) 102 { 103 if(cArray[i]>=0) 104 { 105 cArray[i+1] = cArray[i]+nArray[i]; 106 } 107 while(cArray[i+1]<0) 108 { 109 cArray[i+2]=nArray[i+1]; 110 i++; 111 } 112 } 113 //在數(shù)組中得到最大值 114 for(i=1;i<length;i++) 115 { 116 if(cArray[i+1]>=cArray[i]) 117 { 118 max = cArray[i+1]; 119 } 120 else if(cArray[i+1]<cArray[i]) 121 { 122 m = cArray[i]; 123 cArray[i]=cArray[i+1]; 124 cArray[i+1]=m; 125 max = cArray[i+1]; 126 } 127 } 128 System.out.println("max is "+max); 129 } 130 }三、截圖
四、總結(jié)
單元測試很重要,能夠發(fā)現(xiàn)一些函數(shù)功能的bug。 ?
五、 結(jié)對開發(fā)過程體會以及解決沖突
體會:
在開發(fā)層次,結(jié)對編程能提供更好的設(shè)計質(zhì)量和代碼質(zhì)量,兩人合作能有更強的解決問題的能力。
對開發(fā)人員自身來說,結(jié)對工作能帶來更多的信心,高質(zhì)量的產(chǎn)出能帶來更高的滿足感,同時,能夠降低學(xué)習(xí)成本,一邊編程,一邊共享知識和經(jīng)驗,有效地在實踐中進行學(xué)習(xí)。
在心理上,? 當(dāng)有另一個人在你身邊和你緊密配合, 做同樣一件事情的時候,? 你不好意思開小差, 也不好意思糊弄。
沖突:
對于有不同習(xí)慣的編程人員,可以在一起工作會產(chǎn)生麻煩,甚至矛盾。
兩個人在一起工作可能會出現(xiàn)工作精力不能集中的情況。程序員可能會交談一些與工作無關(guān)的事情,反而分散注意力,導(dǎo)致效率比單人更為低下。
工作圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
轉(zhuǎn)載于:https://www.cnblogs.com/hzxsg0919/p/5384988.html
總結(jié)
以上是生活随笔為你收集整理的课堂练习--最大子数组和 环的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hudson部署过程
- 下一篇: How to scroll the wi