java归并排序实现,java面试排序算法

  java归并排序实现,java面试排序算法

  如何解决写爬虫IP受阻的问题?立即使用。

  文章背景:

  复习算法和数据结构的时候,发现了面试笔试题。让我们看看下面的问题:

  (学习视频分享:java教学视频)

  数组中的两个数字。如果前一个数字大于后一个数字,则这两个数字以相反的顺序形成一对。进入一个数组,找出这个数组中逆序排列的对的总数p。并且将模p的结果输出到1000000007。输出P00000007.

  输入描述:

  确保输入数组中没有相同的数字。

  数据范围:

  对于size=10^4的数据

  size=10^5大学的数据

  对于0的数据,大小=2 * 10 ^ 5

  分析:

  这个问题很容易直接求解,但是时间复杂度是o(n*n)。一开始我想都没想就得到这个问题,直接用dp完成了。然后,我发现直接解dp比较好,因为都是o(n*n)的复杂度,dp也占用2 * 10 ^ 5的空间。下面是直接解和dp,都超时了。

  (更多相关面试问题推荐:java面试问答)

  代码共享:

  //直接找到方法,超时

  公共类解决方案{

  公共静态int sum

  public static int inverse pairs(int[]array){

  dp(数组);

  返回总和;

  }

  公共静态void dp(int []array){

  for(int I=array . length-1;I 0;我- ){

  for(int j=I-1;j=0;j - ){

  if(array[j] array[i]){

  sum=1;

  }

  }

  sum %=1000000007

  }

  }

  }公共类解决方案{

  //一维数组dp

  公共静态int sum

  public static int inverse pairs(int[]array){

  dp(数组);

  返回总和;

  }

  public static int count[]=new int[200004];

  公共静态void dp(int []array){

  for(int I=array . length-1;I 0;我- ){

  for(int j=I-1;j=0;j - ){

  if(array[j] array[i]){

  count[j]=count[j 1]1;

  }否则{

  count[j]=count[j 1];

  }

  }

  sum=count[0];

  sum %=1000000007

  for(int k=0;k数组. length;k)

  count[k]=0;

  }

  }

  }dp这里是多余的,

  下面是解决问题的归并排序。如果不知道合并排序,可以看看我之前的博客合并排序:

  公共类解决方案{

  //合并排序AC

  公共静态int cnt

  public static int inverse pairs(int[]array){

  if(数组!=null){

  RecusionSorted(array,0,array . length-1);

  }

  归还cnt00000007;

  }

  public static void MegerArray(int[]data,int start,int mid,int end) {

  int temp[]=new int[end-start 1];

  int i=mid

  int j=end

  int m=mid 1;

  int z=0;

  while(j=m i=start) {

  if(data[i] data[j]) {

  temp[z]=data[I-];

  CNT=(j-mid)00000007;

  cnt %=1000000007

  }否则{

  temp[z]=data[j-];

  }

  }

  while(j=m) {

  temp[z]=data[j-];

  }

  while(i=start) {

  temp[z]=data[I-];

  }

  for(int k=start;k=结束;k ) {

  data[k]=temp[end-k];

  }

  }

  public static void recusion sorted(int data[],int start,int end ) {

  如果(开始结束){

  int mid=(start end)1;

  RecusionSorted(数据、开始、中期);

  RecusionSorted(data,mid 1,end);

  MegerArray(数据,开始,中间,结束);

  }

  }

  }相关推荐:java入门教程以上是java面试中合并和排序应用的详细内容。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: