解题思路
只想到了递归。时间复杂度应该是O(n^3)
提交代码
class Solution {
public void wiggleSort(int[] nums) {
boolean flag=true;
int len=nums.length;
boolean[] flags=new boolean[len];
int[] res=new int[len];
for(int i=0;i<len;i++) {
res[0]=nums[i];
flags[i]=true;
if(findNext(res,0,flag,flags,nums,len-1))
break;
flags[i]=false;
}
for(int i=0;i<len;i++)
nums[i]=res[i];
}
private boolean findNext(int[] res,int p,boolean flag,boolean[] flags,int[] nums,int cnt) {
if(cnt==0) return true;
int len=nums.length;
if(flag) {
for(int i=0;i<len;i++) {
if(!flags[i]&&nums[i]>res[p]) {
res[++p]=nums[i];
flags[i]=true;
if(findNext(res,p,false,flags,nums,cnt-1)) return true;
p--;
flags[i]=false;
}
}
}else {
for(int i=0;i<len;i++) {
if(!flags[i]&&nums[i]<res[p]) {
res[++p]=nums[i];
flags[i]=true;
if(findNext(res,p,true,flags,nums,cnt-1)) return true;
p--;
flags[i]=false;
}
}
}
return false;
}
}
运行结果

本文介绍了一种使用递归算法实现的摆动排序方法,该方法的时间复杂度为O(n^3)。通过递归寻找下一个符合条件的元素,实现了数组的摆动排序,即元素按大于、小于交替排列。代码示例展示了如何在Java中实现这一算法。
1104

被折叠的 条评论
为什么被折叠?



