热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一维数组中重复元素的去除

一维数组中重复元素的去除-一维数组中重复元素的去除前言一、基本思路二、步骤1.设置判断数组Arr[]:2.继承数组newArr[]获取不重复元素总结前言关于一维数


前言

关于一维数组中有重复的元素该怎么剔除,作为java初学者的我整理出不调用任何特殊库的基础方法,这种思想在其他语言也适用。

一、基本思路

首先,假设一个一维数组arr[ ]={ 4, 3, 35, 3, 2, 4, 6, 3},其中有三个重复元素 3,4,3。要如何剔除呢,由于还没有涉猎到一些经典的调用,所以我选择了用新的数组newArr[ ]去继承原来数组中的不重复的元素,另外还需要一个判断数组,来判断arr[ ]中哪几个元素是重复的,才好去除掉。
.

二、步骤

1.设置判断数组Arr[ ]:

代码如下(示例):

int[] arr = { 4, 3, 35, 3, 2, 4, 6, 3 };

		int[] Arr = new int[arr.length];

		for (int i = 0; i < arr.length; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[i] == arr[j]) {
					Arr[j] = 1;         //把Arr中元素下标和arr中元素下标一致的元素,赋值为1,来标记判断重复元素的位置(下标)
				}
			}
		}`
		// //测试一下相同元素的位置
		for (int i = 0; i < Arr.length; i++) {
			System.out.print(Arr[i]);

初始化一个长度和arr相同的数组Arr={0,0,0,0,0,0,0,0},用两层嵌套for循环来判断各重复元素:外层循环控制比较轮数,内层循环控制不同的两个元素之间的比较。(其实总体过程就是首先第一个元素和后面比较是否重复,然后第二轮是从第二个元素开始依次和右边剩下的各个元素开始比较,第三轮…第n轮…

eg: i=0时,进入外层循环,第一轮比较:以arr[i]=arr[0]=4为基准开始比较,
进入内层循环,再进行比较:
(1)arr[j]=arr[i+1]=arr[1]=3,3!=4,不重复,
(2)arr[j+1]=arr[i+2]=arr[2]=35,35!=4,不重复,
(3)arr[j+2]=arr[i+3]=arr[3]=3, 3!=4,不重复 ,
(4)arr[j+3]=arr[i+4]=arr[4]=2, 2!=4,不重复 ,
(5)arr[j+4]=arr[i+5]=arr[5]=4, 4==4,重复

此时找到了一个重复的元素4,然后同样的
i=1时,以arr[i]=arr[1]=3为基准进入第二轮比较,可以找到重复元素arr[3]=3,arr[7]=3,都是重复元素
i=…时,一直重复arr.length(数组的长度)轮比较,最终找出重复元素只有三个,就是3,4,3。
注意到: // //测试一下相同元素的位置
for (int i = 0; i System.out.print(Arr[i]);
其实这一步不必要,但是为了直观显示出重复元素的位置,我输出了判断数组Arr,输出结果是 0 0 0 1 0 1 0 1,很清晰的看出原数组arr中哪三个位置的元素重复了

2.继承数组newArr[ ]获取不重复元素

就是剔除重复元素的步骤

	System.out.println();
		int count = 0;
		for (int i = 0; i < Arr.length; i++) {
			if (Arr[i] == 0) {
				count++;
			}
			System.out.println("不重复元素的个数有" + count + "个");
		int[] newArr = new int[count];

(1)遍历判断数组Arr[ ],遍历到0元素的时候,计数器count+1,count数就是不重复元素个数,就是继承数组newArr[ ]的长度。
(2) 设置计数器 index 初始化=0,for循环遍历判断数组Arr[ ],通过if条件语句。如果Arr[ ]=0,说明在该位置下的原数组元素是不重复的,则执行newArr[index++] = arr[i];(把原数组中不重复的元素继承给newArr)

int index = 0;
		for (int i = 0; i < Arr.length; i++) {
			if (Arr[i] == 0) {
				newArr[index++] = arr[i];
			}
}
		for (int i = 0; i < newArr.length; i++) {
			System.out.print(newArr[i] + " ");
		}

(3)for循环遍历继承数组newArr[ ],输出结果就是去除重复元素后的最终结果。

总结

关键词 :
判断数组Arr[ ]:判断数组中重复元素的位置(下标)。
继承数组newArr[ ]:继承去掉重复元素后剩下不重复的数组元素。
(以上两个数组都是我自己方便理解取的名字)
以上就是我要介绍的全部内容,由于水平有限难免会有纰漏,希望能帮助到大家,大佬们欢迎批评指正。
附上完整代码:

public class Array {

	public static void main(String[] args) {
		int[] arr = { 4, 3, 35, 3, 2, 4, 6, 3 };

		int[] Arr = new int[arr.length];

		for (int i = 0; i < arr.length; i++) {
			for (int j = i + 1; j < arr.length; j++) {
				if (arr[i] == arr[j]) {
					Arr[j] = 1;
				}
			}
		}
		// //测试一下相同元素的位置
		for (int i = 0; i < Arr.length; i++) {
			System.out.print(Arr[i] + " ");
		}
		System.out.println();
		int count = 0;
		for (int i = 0; i < Arr.length; i++) {
			if (Arr[i] == 0) {
				count++;
			}
		}
		System.out.println("重复元素的个数" + count);
		int[] newArr = new int[count];
		int index = 0;
		for (int i = 0; i < Arr.length; i++) {
			if (Arr[i] == 0) {
				newArr[index++] = arr[i];

			}
		}
			System.out.println("去除掉重复元素后的数组:");
		for (int i = 0; i < newArr.length; i++) {
			System.out.print(newArr[i] + " ");
		}

	}
}

输出结果:


推荐阅读
  • 本文深入解析了Java面向对象编程的核心概念及其应用,重点探讨了面向对象的三大特性:封装、继承和多态。封装确保了数据的安全性和代码的可维护性;继承支持代码的重用和扩展;多态则增强了程序的灵活性和可扩展性。通过具体示例,文章详细阐述了这些特性在实际开发中的应用和优势。 ... [详细]
  • 本文详细介绍了267 Collections的特性和应用场景。作为Java集合框架中的核心接口,Collection接口是所有单列集合类的顶级接口,涵盖了列表、集合和队列等数据结构。通过具体的应用实例,本文深入解析了Collection接口的各种方法和功能,帮助开发者更好地理解和使用这一重要工具。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 在Java中,静态代码块和构造方法的执行顺序是一个重要的概念。本文详细分析了类加载过程中静态代码块和构造方法的执行流程。通过具体的示例代码,解释了静态变量初始化、静态代码块以及构造方法之间的相互关系和执行顺序。这对于理解类的初始化过程和确保程序的正确性具有重要意义。 ... [详细]
  • 在Java编程中,`AbstractClassTest.java` 文件详细解析了抽象类的使用方法。该文件通过导入 `java.util.*` 包中的 `Date` 和 `GregorianCalendar` 类,展示了如何在主方法 `main` 中实例化和操作抽象类。此外,还介绍了抽象类的基本概念及其在实际开发中的应用场景,帮助开发者更好地理解和运用抽象类的特性。 ... [详细]
  • Java学习第10天:深入理解Map接口及其应用 ... [详细]
  • 本文总结了JavaScript的核心知识点和实用技巧,涵盖了变量声明、DOM操作、事件处理等重要方面。例如,通过`event.srcElement`获取触发事件的元素,并使用`alert`显示其HTML结构;利用`innerText`和`innerHTML`属性分别设置和获取文本内容及HTML内容。此外,还介绍了如何在表单中动态生成和操作``元素,以便更好地处理用户输入。这些技巧对于提升前端开发效率和代码质量具有重要意义。 ... [详细]
  • 枚举类中enum关键字的常见应用与实践
    在枚举类中,`enum`关键字具有重要的作用,本文探讨了其常见的应用场景与实践。特别指出,枚举对象必须置于枚举类的首行,否则将导致编译错误。通过具体的代码示例,详细解析了这一规则及其背后的原理,帮助开发者更好地理解和使用枚举类。 ... [详细]
  • 在Android应用开发中,实现与MySQL数据库的连接是一项重要的技术任务。本文详细介绍了Android连接MySQL数据库的操作流程和技术要点。首先,Android平台提供了SQLiteOpenHelper类作为数据库辅助工具,用于创建或打开数据库。开发者可以通过继承并扩展该类,实现对数据库的初始化和版本管理。此外,文章还探讨了使用第三方库如Retrofit或Volley进行网络请求,以及如何通过JSON格式交换数据,确保与MySQL服务器的高效通信。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 第六章:枚举类型与switch结构的应用分析
    第六章深入探讨了枚举类型与 `switch` 结构在编程中的应用。枚举类型(`enum`)是一种将一组相关常量组织在一起的数据类型,广泛存在于多种编程语言中。例如,在 Cocoa 框架中,处理文本对齐时常用 `NSTextAlignment` 枚举来表示不同的对齐方式。通过结合 `switch` 结构,可以更清晰、高效地实现基于枚举值的逻辑分支,提高代码的可读性和维护性。 ... [详细]
  • 具备括号和分数功能的高级四则运算计算器
    本研究基于C语言开发了一款支持括号和分数运算的高级四则运算计算器。该计算器通过模拟手算过程,对每个运算符进行优先级标记,并按优先级从高到低依次执行计算。其中,加减运算的优先级最低,为0。此外,该计算器还支持复杂的分数运算,能够处理包含括号的表达式,提高了计算的准确性和灵活性。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
author-avatar
淡漠少_341
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有