课堂练习--最大子数组和 环
一、設計思路
1、circle(int l)函數進行數組長度的輸入。
2、setArray()函數進行數組的輸入。
3、changeArray()函數將數組環轉化為數組列 此時求出的max為環的最大值
? ? 首先,將array[]數組的值賦值給sArray[]數組,進行原值儲存。然后for循環找出此數組的最小值。?
? ? ?然后在通過循環得到此最小值的位置。然后在將位置后的數賦值給新數組nArray數組前面,位置前的 ? ? ? 賦值給nArray后面,得到一個最小值在首位置的新數組。
4、
ArrayMax()函數實現求最大子數組的和。應為復雜度為O(n),首先 輸入一個數組 如:
?-1 2 -1 -2 5 4 3 -6 8 9?
先定義一個新的數組cArray[],長度為11.然后初始化cArray[1]為0;for循環中 有
cArray[i+1] = cArray[i]+array[i];
所以新的數組為 :
0 -1 2 1 -1...
因為求最大值,所以判斷當cArray[]小于0時,將5 賦值給新數組
即為:
0 -1 2 1 -1 5 9 12 6...
最后在得到的新數組中求出最大的值 此時這個值為最大的子數組和。
?
?源代碼:
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[];//原數組 19 int sArray[];//儲存原始數組 20 int nArray[];//轉換后的新數組 21 int cArray[];//最后得到的數組 22 int length;//數組長度 23 int max; 24 int min; 25 int position; 26 int i; 27 int m; 28 public circle(int l)//輸入數組長度 29 { 30 length = l; 31 } 32 33 void setArray()//輸入數組 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()//將數組環轉換為數組列 此時求出的max為最大值 45 { 46 //儲存原數組 47 sArray = new int [length]; 48 for(i= 0;i<length;i++) 49 { 50 sArray[i] = array[i]; 51 } 52 53 //得到array數組中的最小值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 //得到新的數組 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 //在數組中得到最大值 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 }三、截圖
四、總結
單元測試很重要,能夠發現一些函數功能的bug。 ?
五、 結對開發過程體會以及解決沖突
體會:
在開發層次,結對編程能提供更好的設計質量和代碼質量,兩人合作能有更強的解決問題的能力。
對開發人員自身來說,結對工作能帶來更多的信心,高質量的產出能帶來更高的滿足感,同時,能夠降低學習成本,一邊編程,一邊共享知識和經驗,有效地在實踐中進行學習。
在心理上,? 當有另一個人在你身邊和你緊密配合, 做同樣一件事情的時候,? 你不好意思開小差, 也不好意思糊弄。
沖突:
對于有不同習慣的編程人員,可以在一起工作會產生麻煩,甚至矛盾。
兩個人在一起工作可能會出現工作精力不能集中的情況。程序員可能會交談一些與工作無關的事情,反而分散注意力,導致效率比單人更為低下。
工作圖:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
轉載于:https://www.cnblogs.com/hzxsg0919/p/5384988.html
總結
以上是生活随笔為你收集整理的课堂练习--最大子数组和 环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hudson部署过程
- 下一篇: How to scroll the wi