前言
本篇講解了一些數(shù)組相關(guān)題目(主要以代碼的形式呈現(xiàn)),主要目的在于鞏固數(shù)組相關(guān)知識。
上一篇?數(shù)組?講解了一維數(shù)組和二維數(shù)組的基礎(chǔ)知識~
歡迎關(guān)注個人主頁:逸狼
創(chuàng)造不易,可以點點贊嗎~
如有錯誤,歡迎指出~
題1:實現(xiàn)toString的功能
將數(shù)組元素以字符串的形式輸出在屏幕上
思路
首先要判斷空指針和空數(shù)組的情況,利用字符串拼接實現(xiàn)toString功能
//實現(xiàn)自己的數(shù)組轉(zhuǎn)成字符串
public static String myToString(int[] array){
//判斷空指針情況 (沒有指向?qū)ο螅? if(array==null){
return null;
}
//判斷空數(shù)組情況 (指向的對象為空)
if(array.length==0){
return "[]";
}
String ret="[";
for (int i = 0; i < array.length; i++) {
ret=ret+array[i];
if(i!= array.length-1){
ret=ret+" ,";//字符串拼接
}
}
ret+="]";
return ret;
}
題2:查找數(shù)組中的元素
順序查找
如果數(shù)組比較大,效率低
public static int checkNum(int[]array,int key){
for (int i = 0; i < array.length; i++) {
if(array[i]==key){
return i;
}
}
return -1;
}
二分查找
效率高,前題是建立在當(dāng)前數(shù)組是有序的
//二分查找
public static int zheBanFind(int[]array,int key){
int right=0;
int left= array.length-1;
while(right<=left){
//int mid=(right+left)/2;
//int mid=(left+(left-righ)/2);//防止越界
int mid=(right+left)>>>1;//右移一位,相當(dāng)于除法
if(array[mid]<key){
right=mid+1;
}
if(array[mid]>key){
left=mid-1;
}
if(array[mid]==key){
return mid;
}
}
return -1;
}
題3:冒泡排序
//java實現(xiàn)冒泡排序
public static void BubbleSort(int[]array){
boolean flag=true;
for (int i = 0; i < array.length-1; i++) {
//第一趟
for (int j = 0; j < array.length-1-i; j++) {//減i表示每一趟都比上一趟少一次
if(array[j]>array[j+1]){
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
flag=false;
}
}
if(flag==true){
break;
}
}
}
題4:數(shù)組的逆置
//數(shù)組的逆置
public static void reverse(int[]array){
int left=0;
int right= array.length-1;
while(left<right){
int tmp=array[left];
array[left]=array[right];
array[right]=tmp;
left++;
right--;
}
}
題5:數(shù)組的拷貝
將數(shù)組重新拷貝一份,當(dāng)然java中自帶了拷貝方法copyOf(既可以拷貝,又可以擴容)
}
//數(shù)組的拷貝
public static int[] copy1(int[]array){
int[]tmp=new int[array.length];
for (int i = 0; i < array.length; i++) {
tmp[i]=array[i];
}
return tmp;
}
public static void main(String[] args) {
int[]array={9,8,7,6,5,4,3,2};
//Java里自帶的拷貝
/**
* 可以看作是擴容
*/
int[] cp=Arrays.copyOf(array,array.length*2);
System.out.println(Arrays.toString(cp));
//數(shù)組填充 可以局部填充
int[] array4=new int[10];
Arrays.fill(array4,1,6,666);//在數(shù)組array4中的【1,6)的位置填充666
System.out.println(Arrays.toString(array4));
}
題6:奇前偶后
將數(shù)組中奇數(shù)放在前面,偶數(shù)放在后面
public static void fun3(int[] array) {
int left = 0;
int right = array.length - 1;
while (left < right) {
while (left < right && array[left] % 2 != 0) {//left<right防止越界
//奇數(shù)
left++;
}
while (left < right && array[right] % 2 == 0) {//left<right防止越界
//偶數(shù)
right--;
}
int tmp = array[left];
array[left] = array[right];
array[right] = tmp;
}
}
public static void main(String[] args){
int[] array = {1, 2, 3, 5, 6, 7};
fun3(array);
System.out.println(Arrays.toString(array));
}
題7:找加數(shù)
? 在數(shù)組{2,7,11,15}中找兩個數(shù)相加的值為13,返回【2,11】文章來源:http://www.zghlxwxcb.cn/news/detail-846529.html
public static int[]fun4(int[]array,int target){
int[]ret={-1,-1};//沒找到就直接返回-1
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if(array[i]+array[j]==target){
ret[0]=array[i];
ret[1]=array[j];
}
}
}
return ret;
}
public static void main(String[] args) {
int[]array={2,7,11,15};
int[]ret=fun4(array,4);
System.out.println(Arrays.toString(ret));
}
題8:判斷是否有連續(xù)三個奇數(shù)
判斷一個數(shù)組中是否存在連續(xù)3個奇數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-846529.html
public static boolean fun8(int[]array){
int count=0;
for (int i = 0; i < array.length; i++) {
if(array[i]%2!=0){
count++;
if(count==3){
return true;
}
}
else{
count=0;
}
}
return false;
}
public static void main(String[] args) {
int[]array={1,2,3,0,7,9,6};
System.out.println(fun8(array));
}
到了這里,關(guān)于【JavaSE】java刷題--數(shù)組練習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!