欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Leetcode JAVA刷刷站(75)颜色分类

Leetcode JAVA刷刷站(75)颜色分类

2024/11/30 12:38:58 来源:https://blog.csdn.net/m0_73399576/article/details/141405632  浏览:    关键词:Leetcode JAVA刷刷站(75)颜色分类

 一、题目概述

二、思路方向

       在Java中,要实现这个排序算法,我们可以使用三指针的方法,也称作荷兰国旗问题(Dutch National Flag Problem)。这个方法使用三个指针来分别追踪数组中小于、等于和大于中间值的元素的边界。在这个特定的问题中,中间值是1(代表白色),但我们实际上更关心的是将0(红色)放在前面,将2(蓝色)放在后面,而1(白色)则位于中间。

三、代码实现 

public class Solution {  public void sortColors(int[] nums) {  if (nums == null || nums.length <= 1) {  return;  }  int low = 0; // 小于中间值的指针  int mid = 0; // 当前遍历的指针  int high = nums.length - 1; // 大于中间值的指针  while (mid <= high) {  if (nums[mid] == 0) {  // 如果当前元素是0,则与low指向的元素交换,并将两个指针都向前移动  swap(nums, low, mid);  low++;  mid++;  } else if (nums[mid] == 1) {  // 如果当前元素是1,则只将mid指针向前移动  mid++;  } else { // nums[mid] == 2  // 如果当前元素是2,则与high指向的元素交换,但只将high指针向后移动  swap(nums, mid, high);  high--;  }  }  }  // 交换数组中两个位置的值  private void swap(int[] nums, int i, int j) {  int temp = nums[i];  nums[i] = nums[j];  nums[j] = temp;  }  public static void main(String[] args) {  Solution solution = new Solution();  int[] nums = {2, 0, 2, 1, 1, 0};  solution.sortColors(nums);  for (int num : nums) {  System.out.print(num + " ");  }  }  
}

执行结果:  

四、小结

       在这个代码中,low 指针用于追踪所有小于1(即0)的元素的边界,mid 指针用于遍历数组,high 指针用于追踪所有大于1(即2)的元素的边界。当mid指针遇到0时,它与low指针交换,并将两个指针都向前移动;当mid指针遇到1时,它只向前移动;当mid指针遇到2时,它与high指针交换,但只将high指针向后移动。这个过程一直持续到mid指针超过high指针为止,此时数组就被排序好了。

 结语 

谁勇敢地经受过青春之火的洗礼

谁就毫不惧怕晚年的严寒冰霜

!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com