写一个查找算法找出数组中相同的元素

 1     import java.util.ArrayList;
 2
 3     public class Test {
 4
 5         // 原始数据data。假设data数组中的数据元素已经按照某种顺序排好。
 6         // 但是,该数组中的数据元素重复出现。
 7         // 我们的目的是查找、解析data数组中重复出现的某元素。
 8         // 比如,在这个data数组中,元素‘C‘在数组位置2,3重复出现两次。
 9         // 注意!有些元素没有重复出现,比如元素‘B‘。
10         private String[] data = { "A", "A", "B", "C", "C", "D", "D", "D" };
11
12         // 存储分类好的数据元素。
13         private ArrayList<Group> groups = new ArrayList<Group>();
14
15         // 核心的算法实现。
16         public void find() {
17
18             // 游标index
19             int index = 0, j = 0;
20
21             while (index < data.length) {
22                 Group group = new Group();
23                 group.title = data[index];
24
25                 String t = group.title;
26
27                 ArrayList<String> children = new ArrayList<String>();
28
29                 for (j = index; j < data.length; j++) {
30
31                     String child = data[j];
32                     if (t.equals(child)) {
33                         // 同时记录该重复出现的元素在原数组中的下标j,便于查验、评估结果。
34                         children.add(child + "@" + j);
35                     } else {
36                         break;
37                     }
38                 }
39
40                 // 往后推进游标index
41                 index = j;
42
43                 group.children = children;
44                 groups.add(group);
45             }
46         }
47
48         // 输出结果。
49         private void print() {
50             for (int i = 0; i < groups.size(); i++) {
51                 Group g = groups.get(i);
52                 System.out.println(g);
53             }
54         }
55
56         // 自己构造一个类,作为一组数据的容器。
57         // 该类用一个title表明这一group数据是归属于那个重复元素的组。
58         // 该title下重复的元素装入到ArrayList<String> children中,供遍历查询。
59         private class Group {
60             public String title;
61             public ArrayList<String> children;
62
63             // 结果。
64             @Override
65             public String toString() {
66                 String str = "组" + title + ": ";
67                 for (int i = 0; i < children.size(); i++) {
68                     str += children.get(i) + " ";
69                 }
70
71                 return str;
72             }
73         }
74
75         public static void main(String args[]) {
76             Test t = new Test();
77             t.find();
78             t.print();
79         }
80     }  
时间: 2024-08-06 10:20:03

写一个查找算法找出数组中相同的元素的相关文章

9.11排序与查找(三)——给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,找出数组中的某个元素

/** * 功能:给定一个排序后的数组,包含n个整数,但这个数组已被旋转过多次,次数不详.找出数组中的某个元素. * 可以假定数组元素原先是按从小到大的顺序排列的. */ /** * 思路:数组被旋转过了,则寻找拐点. * @param a * @param left * @param right * @param x:要搜索的元素 * @return */ public static int search(int[] a,int left,int right,int x){ int mid=(

[算法]找出数组当中的中枢元素

给定一个整型数组,找出pivot,使得对于任意i < pivot,a[i] <=a[pivot],对于i > pivot,a[i]>=a[pivot],只能用一个额外的数组,和少量空间. 思路 1.使用一个数组t记录,t[i]记录的是a[0]~a[i]的最大值 int *t = new int[n]; for(int i = 0, max = ~0; i < n; ++i){ if(a[i] > max){ max = a[i]; } t[i] = max; } 2.从

442. 找出数组中重复的元素 Find All Duplicates in an ArrayGiven an array of integers

Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once. Find all the elements that appear twice in this array. Could you do it without extra space and in O(n) runtime? Example: Input: [4,3,2,7,

JavaScript 找出数组中重复的元素

实现检测数组重复元素的功能,需要注意一点的是,多个(2个或2个以上)重复元素,我们只需要挑出一个来就可以了. <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>文字循环显示</title> <script type="text/javascript"> var sear=function(arr) { var

1142: 零起点学算法49——找出数组中最大元素的位置(下标值)

1142: 零起点学算法49--找出数组中最大元素的位置(下标值) Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 1937  Accepted: 977[Submit][Status][Web Board] Description 找出数组中最大的元素的下标. Input 多组测试,每组先输入一个不大于10的整数n 然后是n个整数 Output 输出这n个整数中最大的元素及下标值 Sample I

经典算法学习——快速找出数组中两个数字,相加等于某特定值

这个算法题的描述如下:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值.目前我假设数组中的都是各不相等的整数.这道题是我在一次面试中被问到的,由于各种原因,我没回答上来,十分尴尬.其实这道题十分简单,我们使用相对巧妙的方法来实现下.注意不使用两层循环的元素遍历.示例代码上传至:https://github.com/chenyufeng1991/SumTo100 . 算法描述如下: (0)首先对原数组进行排序,成为递增数组: (1)对排序后的数组头部i [0]和数组尾部j [n-1]

算法之找出数组中出现次数大于n/m的元素

最经典的题目莫过于是: 在一个数组中找出出现次数超过n/2的元素?更进一步的,找出数组中出现次数大于n/3的所有元素? 注:这里有一个很重要的事实,那就是出现次数大于n/m的元素的个数至多为(m-1)个,比如出现次数大于n/3的至多只有两个. 关于这一类题目的解题思路,可以先讲一个游戏 称作 "俄罗斯方块".这里的规则是每一行的元素要完全不一样,一样的元素则总是在同一列,如果最下面的行已经被填满,那么消除最下面的行. 例如在数组 A = {7,3,3,7,4,3,4,7,3,4,3,4

面试题3:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

package siweifasan_6_5; /** * @Description:在一个长度为n的数组里的所有数字都在0到n-1的范围内. * 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次. * 请找出数组中任意一个重复的数字. * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2. * @Parameters: // Parameters: // numbers: an array of integers //

剑指offer(Java版)第一题:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 *请找出数组中任意一个重复的数字。 *例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。

/*在一个长度为n的数组里的所有数字都在0到n-1的范围内. * 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. * 请找出数组中任意一个重复的数字. * 例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3.*/ import java.util.*; public class Class1 { static class findRepeatedNumber{ public int findRepeatedN