黑马程序员技术交流社区

标题: 算法设计 [打印本页]

作者: long362144768    时间: 2013-9-25 10:30
标题: 算法设计
本帖最后由 long362144768 于 2013-9-25 22:43 编辑

1,一个数组循环左移三位(数组长度大于10),求出最优的空间开销。
作者: 抽烟男孩    时间: 2013-9-25 22:19
本帖最后由 抽烟男孩 于 2013-9-25 22:23 编辑

这是一道考研体吧,好像用的是海豚算法。空间开销是O(1),跟具体是3
以下是关键代码:
  1. reverse(int[] arr,int from,int end){
  2. int temp;
  3. for(int i=from;i<from+(end - from)/2;i++){
  4. temp = arr[i];
  5. arr[i] = arr[end-i] ;
  6. arr[end-i]=temp;
  7. }
  8. }
  9. main(String[] args){
  10. int[] source ={};//要移动的数组
  11. reverse(source,0,source.length-4);
  12. reverse(source,source.length-3,soucer.lengtj-1);
  13. reverse(source,0,source.length-1);
  14. }
复制代码

作者: long362144768    时间: 2013-9-25 22:41
temp = arr[i];

arr[i] = arr[end-i] ;

arr[end-i]=temp;

这一部分可以优化,
     a[i]^=a[end-i];
     a[end-i]^=a[i];
     a[i]^=a[end-i];
所以空间开销为0.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2