java记录一维数组中多个相同值出现的位置下标

问题描述:

  我需要在一个整数型一维数组中,找出相同数字出现的位置下标并记录。

例如:

int[] test={3,3,1,1,2,5,1}

最终需要得到的是(数字-->出现的位置下标):

3 -->[0,1]
1 -->[2,3,6]
2 -->[4]
5 -->[5]

接下来通过代码实现我想要的功能,如下:

package Test;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class Test
{
//java获取数组中多个相同值的位置
public static void main(String args[])
{
    /**
     * 使用linkedhashmap 效果最好
     * 存储数字,还要存储该数字出现在数组中的下标位置
     * 使用Integer记录数字
     * 使用ArrayList<Integer>存储该数字出现在数组中的下标位置(这样做的目的是不需要像int数组那样去定义它的初始长度)
     * key->value,可以直接获取到数字->所在下标位置
     * @author zwk
     */
    Map<Integer,ArrayList<Integer>> saveMap=new LinkedHashMap<Integer,ArrayList<Integer>>();
    int[] test = {3,3,1,1,2,5,1};
    for (int i = 0; i < test.length - 1; i++)
    {
        if(test[i] != -1)//设置一个数组中不可能出现的值
        {
            //记录该数字
            int id=test[i];

            //创建list,用于存放数字所在的下标位置
            ArrayList<Integer> list=new ArrayList<Integer>();
            list.add(i); //记录该数字出现的第一个位置
            for (int j = i + 1; j < test.length; j++)
            {
                //遍历数组,查找与test[i]相同的值并记录下标
                if(test[i] == test[j])
                {
                    list.add(j);
                    test[j] = -1;//同上,设置一个不可能出现的值,要与前面设置的保持一致
                }
            }
            //通过key-value将该数字和出现的位置put进map
            saveMap.put(id, list);
        }
    }

    //获取saveMap中的key值,即出现的数字个数
    Set<Integer> idSet=saveMap.keySet();
    for(int id:idSet) {
        //通过key获取其value
        System.out.println(id+" -->"+saveMap.get(id).size());
        System.out.println(id+" -->"+saveMap.get(id));
    }
}
}

代码中有注释,大家基本都是可以读懂。

原文地址:https://www.cnblogs.com/zwk2018/p/9685963.html

时间: 2024-11-05 21:52:05

java记录一维数组中多个相同值出现的位置下标的相关文章

应用Java去除一维数组中的重复数字,且不借助任何java工具类。

昨天有个朋友突然问了我这个问题,一时我竟然无言以对,刚开始就是局限于没办法记录重复位置,作为刚刚接触java语言的菜鸟,绞尽脑汁地一最笨的方法实现了,还望大神指点出更好的方法. public class Test01 { public static void main(String[] args) { test1(); } /** * 方法名: test1 * 方法描述:一位数组去除重复的数字,不借助java工具类,方法比较笨拙,还请高手指点 * @param: Test01 * @return

输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩 从大到小打印。三个功能(输入是一个函数,求平均分是一个函数,排序是一个 函数)都用函数实现,最后在main方法中调用。

/*5.输入6个人的成绩放入到一个一维数组中,然后打印出平均分,最后按成绩从大到小打印.三个功能(输入是一个函数,求平均分是一个函数,排序是一个函数)都用函数实现,最后在main方法中调用.*/ #include <stdio.h> int inputScore(){ int score; scanf("%d",&score); return score;} double avg(int scores[],int length){ int i,score = 0;

将一个一维数组的元素赋值给另外一个一维数组中

//数组拷贝 int a[5] = {37,25,18,-2,78}; int b[5] = {0}; for (int i = 0; i < 5; i++) { b[i] = a[i]; printf("%d ",b[i]); } 将一个一维数组的元素赋值给另外一个一维数组中

灵魂拷问:如何检查Java数组中是否包含某个值 ?

摘自:https://www.cnblogs.com/qing-gee/p/12053156.html 在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深入地研究一下. 另外,我想要告诉大家的是,作为程序员,我们千万不要轻视这些基础的知识点.因为基础的知识点是各种上层技术共同的基础,只有彻底地掌握了这些基础知识点,才能更好地理解程序的运行原理,做出更优化的产品. 我曾在某个技术论坛上分享过

返回数组中元素之和为输入值的元素的下标(以1为基)

Leetcode中原题:Two Sum 给定一个整数数组,找出其中和等于给定目标值的数的下标(数组第一个元素的下标是1),第一个下标必须比第二个下标小,假定此题只有唯一解. 例: 输入:numbers={2, 7, 11, 15}, target=9 输出:index1=1, index2=2 思路1:两层循环,外层循环从0到倒数第二个元素,里层循环,从当前外层循环下标的下一个值开始一直到数组结尾,复杂度O(n2),超时. 思路2:如果数组是有序的,显然有更好的做法.使用常用的效率比较高的排序算

算法--判断数组中是否有重复值

判断数组中是否有重复值 第14节 重复值判断练习题 请设计一个高效算法,判断数组中是否有重复值.必须保证额外空间复杂度为O(1). 给定一个int数组A及它的大小n,请返回它是否有重复值. 测试样例: [1,2,3,4,5,5,6],7 返回:true Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class Checker { 4 public boolean checkDuplicate(int[] a, int n) {

node js 判断数组中是否包含某个值

判断数组中是否包含某个值这里有四种方法.用的测试数据: let arr=["a","b","c"]; let arr2={"a":"aaa","b":"bbb","c":"ccc"}; in判断是否在数组的key里in操作符针对的是key,而非value.而对于普通的一维数组来说,key是隐藏的.所以,对于判断某个数组中是否含有

《数据结构、算法与应用》8.(顺序查找数组中第一个出现指定元素的位置)

最近在读<数据结构.算法与应用>这本书,把书上的习题总结一下,用自己的方法来实现了这些题,可能在效率,编码等方面存在着很多的问题,也可能是错误的实现,如果大家在看这本书的时候有更优更好的方法来实现,还请大家多多留言交流多多指正,谢谢 8. 从左至右检查数组a[0:n-1]中的元素,以查找雨x相等的那些元素.如果找到一个元素与x相等,则函数返回x第一次出现所在的位置.如果在数组中没有找到这样的元素,函数则返回-1. // // main.cpp // Test_08 // // Created

动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有

 1定义接口: Num.h #ifndef_NUM_H_ #define_NUM_H_ #include<stdio.h> #include<stdlib.h> /************************************************************************/ /*数组的结构体类型                                                    */ /*******************