98、技巧-颜色分类

embedded/2024/11/15 4:51:35/

思路

这道题的思路是什么,首先典型荷兰国旗问题:

该问题的关键在于我们要将所有的0放到数组的前部,所有的1放在中间,所有的2放在后部。这可以通过使用两个指针,一个指向数组开头的“0”的最后一个位置,另一个指向数组结尾的“2”的第一个位置,以及一个用来遍历数组的当前指针来实现。

  1. low指针:在数组的开始位置,它的前面(不包括low自身)是排好的0。
  2. high指针:在数组的结束位置,它的后面(不包括high自身)是排好的2。
  3. current指针:用来遍历数组,探索未知的部分。

遍历过程中:

  • 如果遇到0,则将其与low指针指向的位置交换,然后移动low指针和current指针。
  • 如果遇到1,则不做交换,只移动current指针。
  • 如果遇到2,则将其与high指针指向的位置交换,然后仅移动high指针。

由于我们始终将2换到数组的尾部,这意味着交换到前面的元素(未经current检查的元素)需要再次检查,因此当current <= high时,继续遍历。

代码如下:

public void sortColors(int[] nums) {int low = 0, high = nums.length - 1, current = 0;int temp;while (current <= high) {switch (nums[current]) {case 0:// 交换当前元素和low指向的元素temp = nums[current];nums[current] = nums[low];nums[low] = temp;low++;current++;break;case 1:// 不做交换,只移动currentcurrent++;break;case 2:// 交换当前元素和high指向的元素temp = nums[current];nums[current] = nums[high];nums[high] = temp;high--;break;}}
}


http://www.ppmy.cn/embedded/39192.html

相关文章

Java入门基础学习笔记13——数据类型

数据类型的分类&#xff1a; 基本数据类型 引用数据类型 基本数据类型&#xff1a;4大类8种类型&#xff1a; 定义整形用int&#xff0c;再大的数用long。 package cn.ensource.variable;public class VariableDemo2 {public static void main(String[] args) {//目标&#x…

什么是 AI Agent ?

&#xff08;注&#xff1a;本文为小报童精选文章。已订阅小报童或加入知识星球「玉树芝兰」用户请勿重复付费&#xff09; 讲解的同时&#xff0c;也给你推荐一些实用的学习资源。 AI agent &#xff08;智能体 / 代理&#xff09;这个词儿最近非常流行&#xff0c;似乎「大语…

codeforces round 875 div2(a,b,c)

题目链接 正常难度 A #include<bits/stdc.h>using namespace std;#define ing long longvoid solve() {int n;cin>>n;vector<int>a(n1);for(int i1;i<n;i)cin>>a[i];for(int i1;i<n;i){cout<<abs(n1-a[i])<< ;}cout<<\n; }s…

Linux系统调用mmap

0 前言 《Linux系统调用》整体介绍了系统调用,本文重点分析其中mmap的实现与使用方法。 1 定义 1.1 x86 (1)linux-2.6.31- 采用老式定义方法: asmlinkage long sys_mmap(unsigned long addr, unsigned long len,unsigned long prot, unsigned long flags,unsigned long…

Java 多线程补充

线程池 Java线程池是一种能够有效管理线程资源的机制&#xff0c;它可以显著提高应用性能并降低资源消耗。 线程池的主要优点包括&#xff1a; 资源利用高效&#xff1a;通过重用已存在的线程&#xff0c;减少了频繁创建和销毁线程带来的系统开销。响应速度提升&#xff1a;…

uniapp遍历数组对象的常见方法

在 UniApp 中&#xff0c;遍历数组对象的方法与在普通 JavaScript 中是相同的。UniApp 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;因此你可以使用 Vue.js 和 JavaScript 的语法来遍历数组对象。 以下是一些常见的遍历数组对象的方法&#xff1a; 使用 for 循环 …

100000订单直接拒掉,君子爱财,取之有道

近一个月询盘可谓寥寥无几&#xff0c;成交率为0&#xff0c;今天好不容易接了一个客户询盘&#xff0c;订单总价高达100000&#xff0c;听完细节直接拒掉&#xff0c;至于原因懂的都懂&#xff0c;不懂得等我慢慢道来。 前两天有2个询盘&#xff0c;其中一个是二次开发&#x…

AT_abc351_c [ABC351C] Merge the balls 题解

题目传送门 题目大意 你有一个空序列和 N N N 个球。第 i i i 个球 ( 1 ≤ i ≤ N ) (1 \leq i \leq N) (1≤i≤N) 的大小是 2 A i 2^{A_i} 2Ai​。 计算 N N N 操作后序列中剩余的球的个数。 你将进行 N N N 次运算。 在第 i i i 次操作中&#xff0c;你将第 i i…