您的位置:首页 > 其它

算法(五)

2016-05-01 15:14 281 查看

利用递归来实现栈的倒序

0)
{

int a = stack[top-1];
i++;
stack = reverseStackRecursively(stack,top-1);
i--;
stack[i] = a;
}
return stack;
}" data-snippet-id="ext.e433f6494e5d413ef9cbf91ae7661a22" data-snippet-saved="false" data-codota-status="done">[code]//这个i定义在函数外面,防止每次递归调用将i的值初始化为0
int i = 0;
public int[] reverseStackRecursively(int[] stack, int top) {
// write code here
if(top>0)
{

int a = stack[top-1];
i++;
stack = reverseStackRecursively(stack,top-1);
i--;
stack[i] = a;
}
return stack;
}


桶排序的应用

给定一个未排序数组,返回排序后相邻的元素的差的最大值。要求o(logn)

使用桶排序,其实是通过空间换时间。就是开辟一块很大的空间,a[A[i]]=A[i]。这样一趟扫描下来数组就是有序的了

public int findMaxDivision(int[] A, int n) {
// write code here
int[] a=new int[65535];
for(int i=0;i<A.length;i++)
{

a[A[i]]=A[i];
}
int pre=0;
int result=0;
for(int i=0;i<65535;i++)
{
if(a[i]-pre>result&&pre!=0)
{
result=a[i]-pre;
}
if(a[i]!=0)
{
pre=a[i];
}
}
return result;

}


数组相关

给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5,1}, {2,3,4,[2,6,2],5,1}, {2,3,4,2,[6,2,5],1}, {2,3,4,2,6,[2,5,1]}。

定义一个在数组指定范围内找最大值的函数,for循环通过两个指针即可圈定要查找的范围

public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size)

{
ArrayList<Integer> result=new ArrayList<>();

if(size<=0||num==null)
{
return result;
}
int start=0;
int end=size-1;
while (end<num.length)
{
result.add(findMax(num,start,end));
start++;
end++;
}
return result;

}
public int findMax(int[] num,int start,int end)
{
int result=0;
for(int i=start;i<=end;i++)
{
if(num[i]>result)
{
result=num[i];
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: