java - 求下面這道算法的解釋
問題描述
已知長度為n的線性表A采用順序存儲結(jié)構,請寫一時間復雜度為O(n)、空間復雜度為O(1)的算法,該算法刪除線性表中所有值為item的數(shù)據(jù)元素。
void Delete(ElemType A[ ],int n)∥A是有n個元素的一維數(shù)組,本算法刪除A中所有值為item的元素。{i=1;j=n;∥設置數(shù)組低、高端指針(下標)。 while(i<j) {while(i<j && A[i]!=item)i++; ∥若值不為item,左移指針。 if(i<j)while(i<j && A[j]==item)j--;∥若右端元素為item,指針左移 if(i<j)A[i++]=A[j--];}
改寫之后運行不出來,下面是改寫后的
package 線性表;public class Work_10 { public Work_10(){int[] arr={2,34,4,4,5};int item=4;delete(arr,item,arr.length-1);for(int a:arr){ System.out.print(a+' ');} } public static void delete(int[] array,int item,int n){int i=0,j=n;while(i<j){ while(i<j&&array[i]!=item) i++; if(i<j) while(i<j&&array[j]==item) j--; if(i<j){array[i++]=array[j--]; }} } public static void main(String[] args) {new Work_10(); }}

不知道該怎么改?求大佬解釋
問題解答
回答1:要想刪除,先搜索,后刪除,給你個搜索的,剩下的自己思考下寫個變種就可以了。
public static int search(byte[] a,int n, byte item) {int low = 0;int high = n - 1;while (low <= high) { int mid = (low + high) >>> 1; byte midVal = a[mid]; if (midVal < item)low = mid + 1; else if (midVal > item)high = mid - 1; elsereturn mid; // 找到item}return -(low + 1); // 沒找到item }回答2:
哦,多出來是因為你輸出的個數(shù)錯了,刪除的過程沒問題。
刪除前,你的數(shù)組內(nèi)容是 2,34,4,4,5,共 5 個元素。
要刪除的內(nèi)容為 4,也就是說刪除后只剩 3 個元素,分別是 2,34,5
所以你的結(jié)果輸出只需要輸出數(shù)組的前 3 個,后面那兩個是作廢了的元素。
相關文章:
1. html5和Flash對抗是什么情況?2. html5 - datatables 加載不出來數(shù)據(jù)。3. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個是怎么回事????4. 利用IPMI遠程安裝centos報錯!5. node.js - mongodb查找子對象的名稱為某個值的對象的方法6. 運行python程序時出現(xiàn)“應用程序發(fā)生異常”的內(nèi)存錯誤?7. 測試自動化html元素選擇器元素ID或DataAttribute [關閉]8. javascript - QQ第三方登錄的問題9. javascript - 在 model里定義的 引用表模型時,model為undefined。10. spring-mvc - spring-session-redis HttpSessionListener失效

網(wǎng)公網(wǎng)安備