[关闭]
@ysner 2021-10-26T06:08:55.000000Z 字数 1528 阅读 620

LeetCode164—最大间距

排序


第一次提交的代码:(快速排序)

  1. class Solution
  2. {
  3. public int maximumGap(int[] nums)
  4. {
  5. int n=nums.length,ans=0;
  6. Arrays.sort(nums);//Arrays.sort()给数组升序排序的内置函数
  7. for(int i=0;i<n-1;i++)
  8. if(nums[i+1]-nums[i]>ans) ans=nums[i+1]-nums[i];
  9. return ans;
  10. }
  11. }

第二次提交的代码:(桶)

  1. class Solution
  2. {
  3. public int maximumGap(int[] nums)
  4. {
  5. int n=nums.length;
  6. if(n<2) return 0;
  7. int Max=-1,Min=Integer.MAX_VALUE,ans=0;
  8. for(int i=0;i<n;i++)
  9. {
  10. Max=Math.max(Max,nums[i]);
  11. Min=Math.min(Min,nums[i]);
  12. }
  13. int[] Tmin=new int[n+1];//保存每个桶内数字的最小值
  14. Arrays.fill(Tmin,Integer.MAX_VALUE);//Arrays.fill可以把数组内每个元素置为同一指定值
  15. int[] Tmax=new int[n+1];//保存每个桶内数字的最大值
  16. Arrays.fill(Tmax,-1);
  17. int gap=(Max-Min)/n+1;//指每个桶内包含数字的最大范围,+1为防止gap=0
  18. for(int i=0;i<n;i++)
  19. {
  20. int id=(nums[i]-Min)/gap;
  21. Tmax[id]=Math.max(Tmax[id],nums[i]);
  22. Tmin[id]=Math.min(Tmin[id],nums[i]);
  23. }
  24. int pre=Min;
  25. for(int i=0;i<=n;i++)
  26. {
  27. if(Tmax[i]==-1) continue;
  28. ans=Math.max(ans,Tmin[i]-pre);//相邻桶之差中取最大值
  29. pre=Tmax[i];//pre保存上一个桶的最大值
  30. }
  31. return ans;
  32. }
  33. }

第三次提交的代码:(基数排序)

  1. class Solution
  2. {
  3. public int maximumGap(int[] nums)
  4. {
  5. int n=nums.length;
  6. if(n<2) return 0;
  7. int Max=-1,ans=0,exp=1;
  8. List<ArrayList<Integer>> list=new ArrayList<>();
  9. for(int i=0;i<10;i++) list.add(new ArrayList<>());//嵌套List的初始化
  10. for(int i=0;i<n;i++) Max=Math.max(Max,nums[i]);
  11. while(Max>=exp)//完全是基数排序思想的模拟实现
  12. {
  13. for(int i=0;i<10;i++) list.set(i,new ArrayList<>());//set修改第i位上List的值
  14. for(int i=0;i<n;i++) list.get(nums[i]/exp%10).add(nums[i]);//get读取第i位上的值
  15. int id=0;
  16. for(int i=0;i<10;i++)
  17. for(int j=0;j<list.get(i).size();j++)
  18. nums[id++]=list.get(i).get(j);
  19. exp*=10;
  20. if(exp<=0) break;//防止exp溢出后变为负数,导致死循环
  21. }
  22. for(int i=0;i<n-1;i++)
  23. ans=Math.max(ans,nums[i+1]-nums[i]);
  24. return ans;
  25. }
  26. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注