目錄
1 陣列找最值
2 陣列統計:求總和、均值、統計偶數個數等
3 反轉
4 複製
5 查詢
6 排序
1、陣列中找最值
思路:(1)先假設第乙個元素最大/最小
(2)然後用max/min與後面的元素一一比較
示例**:
int arr = ;
//找最大值
int max = arr[0];
for(int i=1; imax)
}
2、陣列中找最值及其下標
情況一:找最值及其第一次出現的下標
思路:(1)先假設第乙個元素最大/最小
(2)然後用max/min與後面的元素一一比較
示例**:
int arr = ;
//找最大值
int max = arr[0];
int index = 0;
for(int i=1; imax)
}
或
int arr = ;
//找最大值
int maxindex = 0;
for(int i=1; iarr[maxindex])
}system.out.println("最大值:" + arr[maxindex]);
情況二:找最值及其所有最值的下標(即可能最大值重複)
思路:(1)先找最大值
①假設第乙個元素最大
②用max與後面的元素一一比較
(2)遍歷陣列,看哪些元素和最大值是一樣的
示例**:
int arr = ;
//找最大值
int max = arr[0];
for(int i=1; imax)}
//遍歷陣列,看哪些元素和最大值是一樣的
for(int i=0; i思路:遍歷陣列,挨個的累加,判斷每乙個元素
示例**:
int arr = ;
//求總和、均值
int sum = 0;//因為0加上任何數都不影響結果
for(int i=0; i示例**2:
int arr = ;
//求總乘積
long result = 1;//因為1乘以任何數都不影響結果
for(int i=0; i示例**3:
int arr = ;
//統計偶數個數
int even = 0;
for(int i=0; i方法有兩種:
1、借助乙個新陣列
2、首尾對應位置交換
第一種方式示例**:
int arr = ;
//(1)先建立乙個新陣列
int newarr = new int[arr.length];
//(2)複製元素
int len = arr.length;
for(int i=0; i第二種方式示例**:
int arr = ;
//(1)計算要交換的次數: 次數 = arr.length/2
//(2)首尾交換
for(int i=0; i應用場景:
1、擴容
2、備份
3、擷取
示例**:擴容
int arr = ;
//如果要把arr陣列擴容,增加1個位置
//(1)先建立乙個新陣列,它的長度 = 舊陣列的長度+1
int newarr = new int[arr.length + 1];
//(2)複製元素
//注意:i示例**:備份
int arr = ;
//1、建立乙個長度和原來的陣列一樣的新陣列
int newarr = new int[arr.length];
//2、複製元素
for(int i=0; i示例**:擷取
int arr = ;
int start = 2;
int end = 5;
//1、建立乙個新陣列,新陣列的長度 = end-start + 1;
int newarr = new int[end-start+1];
//2、賦值元素
for(int i=0; i查詢分為兩種:
1、順序查詢:挨個看
對陣列沒要求
2、二分查詢:對折對折再對折
對陣列有要求,元素必須有大小順序的
順序查詢示例**:
int arr = ;
int value = 1;
int index = -1;
for(int i=0; i二分查詢示例**:
/*2、編寫**,使用二分查詢法在陣列中查詢 int value = 2;是否存在,如果存在顯示下標,不存在顯示不存在。
已知陣列:int arr = ;
*/
class exam2;//陣列是有序的使用forint value = 2;
int index = -1;
int left = 0;
int right = arr.length - 1;
int mid = (left + right)/2;
while(left<=right)//沒找到
else if(value > arr[mid])else if(value < arr[mid])
mid = (left + right)/2;
}if(index==-1)else
}}
class exam2;//陣列是有序的
int value = 2;
int index = -1;
for(int left=0,right=arr.length-1,mid = (left+right)/2; left<=right; mid = (left + right)/2)//沒找到
else if(value > arr[mid])else if(value < arr[mid])
}if(index==-1)else
}}
陣列的排序演算法有千萬種,我們只講了兩種:
1、氣泡排序
2、簡單的直接排序
示例**:冒泡:從小到大,從左到右兩兩比較
int arr = ;
for(int i=1; iarr[j+1])
}}
示例**:從大到小,從右到左
char arr = ;
for(int i=1; i=i
*/for(int j=8; j>=i; j--)
}}
示例**:簡單的直接選擇排序
int arr = ;
for(int i=1; imax)
}//(2)如果這個最值沒有在它應該在的位置,就與這個位置的元素交換
/*第1輪,最大值應該在[0]
第2輪,最大值應該在[1]
第3輪,最大值應該在[2]
第4輪,最大值應該在[3]
正好是i-1的值
*/if(index != i-1)}
//顯示結果
for(int i=0; i
陣列相關演算法
問題1 列印1到最大的n位數 解法 一 直接求出n位數的最大值,然後直接從1開始列印 缺陷 可能會溢位,大數問題 void print1tomax int n for int i 1 icout cout 二 在字串上模擬數字加法 void print1tomax int n bool increm...
陣列相關演算法
1.尋找最小的k個數 有n個整數,請找出其中最小的k個數,要求時間複雜度盡可能低。全部排序。使用快速排序演算法排序之後並且輸出最小的k個數,時間複雜度為o nlogn def quick sort array,left,right if left right return low left high...
陣列求和相關演算法
問題1 輸入乙個陣列,在陣列中查詢兩個數,使得它們的和正好是target void findtwosum int a,int n,int target 問題2 輸入整數sum,找出所有和為sum的連續整數序列,至少包含兩個。例如輸入15,由於1 2 3 4 5 4 5 6 7 8 15,所有結果列印...