数组排序之后相邻数的最大差值

电玩女神 2022-05-29 11:51 307阅读 0赞

Center

  1. import java.util.*;
  2. //数组排序之后相邻数的最大差值
  3. public class MaxMinusArr{
  4. //方法一、获得相邻数的最大差值
  5. public static int getMaxMinusArr(int[]arr)
  6. {
  7. int max=Integer.MIN_VALUE;
  8. if(arr==null||arr.length<2)
  9. {
  10. return -1;
  11. }
  12. for(int i=0;i<arr.length-1;i++)
  13. {
  14. int k=arr[i+1]-arr[i];
  15. max=Math.max(max,k);
  16. }
  17. return max;
  18. }
  19. //方法二(基于桶排序的思想)
  20. public static int getMaxMinusArr02(int[]arr)
  21. {
  22. if(arr==null||arr.length<2)
  23. {
  24. return -1;
  25. }
  26. int len=arr.length; //数组的长度
  27. int min=Integer.MAX_VALUE;
  28. int max=Integer.MIN_VALUE;
  29. for(int i=0;i<len;i++)
  30. {
  31. min=Math.min(min,arr[i]); //获得数组中的最小值
  32. max=Math.max(max,arr[i]); //获得数组中的最大值
  33. }
  34. if(min==max)
  35. {
  36. return 0;
  37. }
  38. boolean[]hasNum=new boolean[len+1];
  39. int[]maxs=new int[len+1];
  40. int[]mins=new int[len+1];
  41. int bid=0;
  42. for(int i=0;i<len;i++)
  43. {
  44. bid=bucket(arr[i],len,min,max); //算出桶号
  45. mins[bid] = hasNum[bid] ? Math.min(mins[bid], arr[i]) : arr[i];
  46. maxs[bid] = hasNum[bid] ? Math.min(maxs[bid], arr[i]) : arr[i];
  47. hasNum[bid]=true;
  48. }
  49. int res=0;
  50. int lasMax=maxs[0];
  51. int i=1;
  52. for(;i<=len;i++)
  53. {
  54. if(hasNum[i])
  55. {
  56. res=Math.max(res,mins[i]-lasMax);
  57. lasMax=maxs[i];
  58. }
  59. }
  60. return res;
  61. }
  62. //使用long类型防止相乘时溢出,获得当前数需要放置的桶位置
  63. public static int bucket(long num,long len,long min,long max)
  64. {
  65. return (int)((num-min)*len/(max-min));
  66. }
  67. public static int[]generateArr(int size)
  68. {
  69. int[]arr=new int[size];
  70. for(int i=0;i<size;i++)
  71. {
  72. arr[i]=(int)(Math.random()*100);
  73. }
  74. Arrays.sort(arr);
  75. return arr;
  76. }
  77. //打印生成的矩阵
  78. public static void printArr(int[]arr)
  79. {
  80. for(int i=0;i<arr.length;i++)
  81. {
  82. System.out.print(arr[i]+" ");
  83. }
  84. System.out.println();
  85. }
  86. public static void main(String[]args)
  87. { int size=20;
  88. int[]arr=generateArr(size);
  89. printArr(arr);
  90. System.out.println(getMaxMinusArr(arr));
  91. System.out.println(getMaxMinusArr02(arr));
  92. }
  93. }

Center 1

发表评论

表情:
评论列表 (有 0 条评论,307人围观)

还没有评论,来说两句吧...

相关阅读