删除数组中重复的元素

删除数组中的重复元素,并保持顺序,下面是代码实现:

import java.util.Arrays;  


public class RemoveDuplate {  
    public static void main(String[] args) {  
         int arr[]={4,2,4,6,1,2,4,7,8};  
         System.out.println(Arrays.toString(repeat(arr)));  
    }  

    public static int[] repeat(int [] arr){  
          if(arr == null){  
              return arr;  
          }  

          int arrayLength = arr.length;  
          if(arrayLength == 0){  
              return arr;  
          }  

          int duplicateCount = 0;  
          boolean[] flags = new boolean[arrayLength];  
          for(int i = 0; i < arrayLength; i++){  
              if(flags[i]){  
                  continue;  
              }  
              for(int j = i + 1; j < arrayLength; j++){  
                  if(arr[i] == arr[j]){  
                      flags[j] = true;  
                      duplicateCount++;  
                  }  
              }  
          }  
          int[] noDuplicateArray = new int[arrayLength - duplicateCount];  
          int index = 0;  
          for(int i = 0; i < arrayLength; i++){  
              if(!flags[i]){  
                  noDuplicateArray[index++] = arr[i];  
              }  
          }  
          return noDuplicateArray;  
    }  
}

控制台打印结果:
这里写图片描述
转:

勤奋的asialee的博客http://asialee.iteye.com/blog/2169454

以下是一份关于删除数组重复元素的课程报告示例: ### 一、课程背景与目标 在数据处理和算法设计中,经常会遇到需要处理数组重复元素的情况。删除数组中的重复元素是一个基础且重要的操作,它有助于提高数据的质量和算法的效率。本课程的目标是让学生掌握不同语言和算法下删除数组重复元素的方法,理解其原理和应用场景。 ### 二、相关知识回顾 在数组中,重复元素指的是值相同的元素。处理重复元素的常见方法有使用额外空间和不使用额外空间两种思路。使用额外空间可以借助集合(如 Python 中的 set)来快速去除重复元素,但会增加空间复杂度;不使用额外空间则需要在原数组上进行操作,通过双指针等算法实现,空间复杂度为 O(1)。 ### 三、算法实现与分析 #### (一)C 语言实现 以下是 C 语言删除数组重复元素的代码: ```c #include <stdio.h> #include <stdlib.h> int main() { int n; scanf("%d", &n); int a[n]; for(int i = 0; i < n; i++) { scanf("%d", &a[i]); } printf("%d ", a[0]); for(int i = 1; i < n; i++) { if(a[i] != a[i - 1]) { printf("%d ", a[i]); } } return 0; } ``` 这段代码通过遍历数组,只输出与前一个元素不同的元素,从而实现了删除重复元素的效果。其时间复杂度为 O(n),空间复杂度为 O(1),因为只使用了常数级的额外空间。 #### (二)C++ 实现 以下是 C++ 在原地删除数组重复元素的代码: ```cpp #include <iostream> #include <vector> int removeDuplicates(std::vector<int>& nums) { if(nums.size() < 2) return nums.size(); int slow = 0; for(int fast = 1; fast < nums.size(); fast++) { if(nums[slow] != nums[fast]) { slow++; nums[slow] = nums[fast]; } } return slow + 1; } ``` 该代码使用双指针法,`slow` 指针用于记录不重复元素的位置,`fast` 指针用于遍历数组。当 `nums[slow]` 与 `nums[fast]` 不同时,将 `nums[fast]` 赋值给 `nums[slow + 1]`,并将 `slow` 指针后移。最终 `slow + 1` 即为不重复元素的个数。时间复杂度为 O(n),空间复杂度为 O(1)。 ### 四、总结与展望 通过本次课程,学生们掌握了不同语言下删除数组重复元素的方法,理解了双指针等算法的应用。在实际应用中,根据具体需求和数据规模选择合适的算法非常重要。未来可以进一步研究更复杂数据结构中重复元素的处理,以及在分布式环境下如何高效删除重复元素
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值