news 2026/4/21 21:06:45

算法实战笔记:LeetCode 169 多数元素 75 颜色分类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法实战笔记:LeetCode 169 多数元素 75 颜色分类

目录

一、169. 多数元素(摩尔投票法,O (n) 时间 + O (1) 空间)

题目描述

核心思路

Java 完整代码

复杂度分析

二、75. 颜色分类(三指针,原地排序)

题目描述

核心思路

Java 完整代码

复杂度分析

三、总结(面试必背)


大家好,今天分享两道经典算法题 ——169. 多数元素(简单)和75. 颜色分类(中等),都是面试高频考点,我会用最优解法 + 完整 Java 可运行代码实现,新手也能直接看懂、直接运行。


一、169. 多数元素(摩尔投票法,O (n) 时间 + O (1) 空间)

题目描述

给定一个大小为n的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊n/2⌋的元素,题目保证一定存在。

核心思路

利用摩尔投票法

  • 维护一个候选值candidate和计数器count
  • 相同数字计数 + 1,不同数字计数 - 1
  • 计数器归零时,更换候选值
  • 最终剩下的候选值就是多数元素(因为它永远无法被完全抵消)

Java 完整代码

java

运行

public class MajorityElement { // 核心方法:摩尔投票法 public int majorityElement(int[] nums) { int candidate = 0; int count = 0; for (int num : nums) { // 计数器归零,更换候选人 if (count == 0) { candidate = num; } // 相同+1,不同-1 count += (num == candidate) ? 1 : -1; } return candidate; } // 测试主函数 public static void main(String[] args) { MajorityElement solution = new MajorityElement(); int[] nums = {2, 2, 1, 1, 1, 2, 2}; System.out.println("多数元素:" + solution.majorityElement(nums)); // 输出:2 } }

复杂度分析

  • 时间复杂度:O (n),仅遍历一次数组
  • 空间复杂度:O (1),无额外空间开销

二、75. 颜色分类(三指针,原地排序)

题目描述

给定一个包含红色、白色、蓝色,共n个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照 0(红)、1(白)、2(蓝)顺序排列。不能使用库函数排序

核心思路

三指针法(荷兰国旗问题)

  • p0:0 的右边界,左边全是 0
  • p2:2 的左边界,右边全是 2
  • curr:当前遍历指针
  • 遇到 0 放左边,遇到 2 放右边,遇到 1 跳过

Java 完整代码

java

运行

public class SortColors { public void sortColors(int[] nums) { int p0 = 0; int curr = 0; int p2 = nums.length - 1; while (curr <= p2) { if (nums[curr] == 0) { // 交换 0 到左区 swap(nums, curr, p0); p0++; curr++; } else if (nums[curr] == 2) { // 交换 2 到右区 swap(nums, curr, p2); p2--; } else { // 1 留在中间,直接跳过 curr++; } } } // 数组交换工具方法 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[] main) { SortColors solution = new SortColors(); int[] nums = {2, 0, 2, 1, 1, 0}; solution.sortColors(nums); System.out.print("排序结果:"); for (int num : nums) { System.out.print(num + " "); } // 输出:0 0 1 1 2 2 } }

复杂度分析

  • 时间复杂度:O (n),一次遍历完成排序
  • 空间复杂度:O (1),原地排序,无额外空间

三、总结(面试必背)

  1. 多数元素:用摩尔投票法,空间最优,面试高频送分题
  2. 颜色分类:用三指针,属于荷兰国旗问题,原地排序经典题
  3. 两道题都做到了O (n) 时间 + O (1) 空间,是最优解
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 20:49:47

DLSS Swapper技术解析:游戏超采样技术版本管理深度指南

DLSS Swapper技术解析&#xff1a;游戏超采样技术版本管理深度指南 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为PC游戏玩家设计的工具&#xff0c;能够方便地下载、管理和替换游戏中的DLSS、…

作者头像 李华
网站建设 2026/4/21 20:44:29

ChatGPT写的论文和自己写的文章AIGC检测有什么不同:AI率特征解读

ChatGPT写的论文和自己写的文章AIGC检测有什么不同&#xff1a;AI率特征解读 关于ChatGPT论文AIGC检测&#xff0c;我系统研究过一段时间&#xff0c;也实际验证过各种说法。 这篇文章把关键的逻辑理清楚——知道了原理&#xff0c;遇到问题就知道该怎么处理了。实战方案也一…

作者头像 李华