当前位置: 首页 > news >正文

【简单】数组的partition调整-Java:原问题

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter

package live.every.day.ProgrammingDesign.CodingInterviewGuide.ArrayAndMatrix; import java.util.Arrays; /** * 数组的partition调整 * * 【题目】 * 给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序。 * 例如,arr=[1,2,2,2,3,3,4,5,6,6,7,7,8,8,8,9],调整之后arr=[1,2,3,4,5,6,7,8,9,...]。 * * 【补充题目】 * 给定一个数组arr,其中只可能含有0、1、2三个值,请实现arr的排序。 * 另一种问法为:有一个数组,其中只有红球、蓝球和黄球,请实现红球全放在数组的左边,蓝球放在中间,黄球放在右边。 * 另一种问法为:有一个数组,再给定一个值k,请实现比k小的数都放在数组的左边,等于k的数都放在数组的中间,比k大的数都放在数 * 组的右边。 * * 【要求】 * 1.所有题目实现的时间复杂度为O(N)。 * 2.所有题目实现的额外空间复杂度为O(1)。 * * 【难度】 * 简单 * * 【解答】 * 先来介绍原问题的解法: * 1.生成变量u,含义是在arr[0..u]上都是无重复元素且升序的。也就是说,u是这个区域最后的位置,初始时u=0,这个区域记为A。 * 2.生成变量i,利用i做从左到右的遍历,在arr[u+1..i]上是不保证没有重复元素且升序的区域,i是这个区域最后的位置,初始时 * i=l,这个区域记为B。 * 3.i向右移动(i++)。因为数组整体有序,所以如果arr[i]!=arr[u],说明当前数arr[i]应该加入到A区域里,所以交换arr[u+1] * 和arr[i],此时A的区域增加一个数(u++);如果arr[i]==arr[u],说明当前数arr[i]的值之前已经加入到A区域,此时不用再加 * 入。 * 4.重复步骤3,直到所有的数遍历完。 * 具体请参看如下代码中的leftUnique方法。 * * @author Created by LiveEveryDay */ public class ArrayPartitionAdjustment1 { public static void leftUnique(int[] arr) { if (arr == null || arr.length < 2) { return; } int u = 0; int i = 1; while (i != arr.length) { if (arr[i++] != arr[u]) { swap(arr, ++u, i - 1); } } } private static void swap(int[] a, int i, int j) { int t = a[i]; a[i] = a[j]; a[j] = t; } public static void main(String[] args) { int[] arr = {1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 7, 8, 8}; leftUnique(arr); System.out.printf("The array is: %s", Arrays.toString(arr)); } } // ------ Output ------ /* The array is: [1, 2, 3, 4, 5, 6, 7, 8, 3, 2, 7, 2, 8] */
http://www.jsqmd.com/news/697001/

相关文章:

  • 携程任我行礼品卡怎么变现最快?详细回收流程全解析! - 团团收购物卡回收
  • 智慧树刷课插件终极指南:三步实现自动播放与智能学习
  • 终极网页排版指南:如何通过Typography Handbook快速提升设计水平
  • 在Windows上快速部署Poppler:PDF处理工具的完整使用指南
  • seatunnel数据集成(四)转换器实战:从基础操作到复杂清洗
  • 【简单】设计有setAll功能的哈希表-Java
  • 终极指南:如何快速重置JetBrains IDE试用期,实现30天无限续杯
  • 从David Marr的视觉计算理论,聊聊为什么你的CV模型总感觉“差点意思”
  • 5个步骤掌握SillyTavern:打造专业级AI角色扮演平台终极指南
  • 探索 Geolib:简单高效的地理空间计算库完全指南
  • JetBrains IDE试用期重置终极指南:三步轻松恢复30天免费使用
  • Android位置隐私保护技术深度剖析:FakeLocation模块的架构设计与实战应用
  • 【感知机】从零推导到实战:手撕Perceptron学习算法核心
  • 【简单】调整[0,x)区间上的数出现的概率-Java
  • 含光伏接入的14节点配网储能选址定容模型优化——基于改进粒子群算法的程序实现
  • 低代码开发效率提升300%的关键配置,VSCode这7个隐藏参数99%团队从未启用,速查!
  • SAP批次管理配置保姆级教程:从激活到查找策略,手把手带你避开新手常见坑
  • 如何快速开发微信公众号?FastBootWeixin框架让开发效率提升300%
  • GPU硬件视频编码器技术与UHD直播优化实践
  • 告别生硬动画!用 GSAP 库 5 分钟打造丝滑扭蛋抽奖效果(含缓动函数详解)
  • 2026年3月中央空调实力厂家推荐,酒店中央空调/热泵中央空调/办公室中央空调/工厂中央空调,中央空调实力厂家推荐 - 品牌推荐师
  • 从‘马拉车’到‘回文中心’:图解Manacher算法,让晦涩概念一目了然
  • uni-app vue2 通过vue/cli 脚手架安装sass
  • LangChain核心组件解析:构建高效RAG系统的10大关键技术
  • 如何快速集成SpiderWebScoreView:Android蛛网评分控件的完整指南
  • 告别千篇一律:SillyTavern如何让你的AI对话充满个性与情感
  • 解锁《动物森友会》无限可能:NHSE存档编辑器的5大核心功能详解
  • NCM文件格式转换技术方案:从格式壁垒到跨平台音频自由
  • Teamcenter AWC 使用 流程【指派列表】功能,快速指派审批人员 - 张永全
  • 云原生边缘计算:技术架构与实践