一道对时间复杂度和空间复杂度都有要求的算法题,求解?

arvon009 2011-10-27 04:05:00
给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数。要求:空间复杂度O(1),时间复杂度为O(n)
...全文
140 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
arvon009 2011-10-27
  • 打赏
  • 举报
回复
楼上大侠的认真态度让人钦佩,多谢!
Jobernowl 2011-10-27
  • 打赏
  • 举报
回复
这是最终版了 绝对不改了 上面的都是错的

public int[] process(int[] array){
int i=0;
int j=1;
while(i<array.length&&j<array.length){
if(array[i]%2==0){
if(array[j]%2!=0){
swap(array,i,j);
i++;
j++;
}
else{
j++;
}
}
else{
i++;
j++;
}
}
return array;
}
Jobernowl 2011-10-27
  • 打赏
  • 举报
回复
再看了一下 发现有点过失 所以改正过来

public int[] process(int[] array){
int i=0;
int j=1;
while(i<array.length&&j<array.length){
if(array[i]%2==0){
if(array[j]%2!=0){
swap(array,i,j);
i++;
j++;
}
else{
j++;
}
}
}
return array;
}
Jobernowl 2011-10-27
  • 打赏
  • 举报
回复
我把方法改了 感觉这样子比较好一些

public int[] process(int[] array){
int i=0;
int j=1;
while(i<array.length&&j<array.length){
if(array[i]%2==0){
if(array[j]%2!=0){
swap(array,i,j);
i++;
}
else{
j++;
}
}
}
return array;
}
chhch11111 2011-10-27
  • 打赏
  • 举报
回复
上面的人说的很清楚了
Jobernowl 2011-10-27
  • 打赏
  • 举报
回复

public int[] process(int[] array){
int j=1;
for(int i=0;i<array.length-1;i++){
if(j<array.length){
if(array[i]%2==0){
if(array[j]%2!=0){
swap(array,i,j);
}
else{
j++;
i--;
}
}
}
}
return array;
}
public void swap(int[] array,int a,int b){
int temp=array[a];
array[a]=array[b];
array[b]=temp;
}
public static void main(String[] args) {
int[] a={2,5,4,3,9,7,6,3,1};
int[] b=new Array().process(a);
System.out.println(Arrays.toString(b));
}

结果打印:[5, 3, 9, 7, 3, 1, 6, 4, 2]

oo 2011-10-27
  • 打赏
  • 举报
回复
两个指针,一个从左边,一个从右边
当左边是偶数,右边是奇数时交换两个数

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧