java - 求下面这道算法的解释
问题描述
已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。
void Delete(ElemType A[ ],int n)∥A是有n个元素的一维数组,本算法删除A中所有值为item的元素。{i=1;j=n;∥设置数组低、高端指针(下标)。 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:
哦,多出来是因为你输出的个数错了,删除的过程没问题。
删除前,你的数组内容是 2,34,4,4,5,共 5 个元素。
要删除的内容为 4,也就是说删除后只剩 3 个元素,分别是 2,34,5
所以你的结果输出只需要输出数组的前 3 个,后面那两个是作废了的元素。
相关文章:
1. Apache 已经把网站根目录的改为allow from all了,但是服务器还是不能访问?2. gulp-ruby-sass编译出来的文件有错3. 使用 CSS3 的 Media Query 浏览器会加载其他不同分辨率的 css 文件么4. “Webdrivers”可执行文件可能具有错误的权限请参阅https://sites.google.com/a/chromium.org/chromedriver/home5. php-_server-php_self - nginx $_SERVER[’PHP_SELF’] 得到重复路径是什么原因?6. 前端 - 类到底该如何去命名 .newsList 这种的命名难道真的不是过度语义化吗?~7. 数据挖掘 - 如何用python实现《多社交网络的影响力最大化问题分析》中的算法?8. node.js通过module.exprots返回的是promise对象而非data?9. html - 开发android的调取我web页面 他之前用的是收费的浏览器包 显示是全的换了免费的浏览器包后 显示就不全 是什么原因啊10. javascript - 给js写的盒子添加css样式,css样式没起作用。

网公网安备