找出给定数组内有多少重复的数,并打印它们对应的位置。

local t = {1, 7, 2, 5, 4, 9, 9, 7, 2, 2, 2, 5, 5}

function seekNum(t)
    local dic_count = {}

    local dic_pos = {}

    for i=1,#t do
        if dic_count[tostring(t[i])] == nil then
            dic_count[tostring(t[i])] = 1
        else
            local index = table.indexOf(t, t[i])
            dic_count[tostring(t[i])] = dic_count[tostring(t[i])] + 1

            local index = table.indexOf(t, t[i])
            if index > 0 then
                if dic_pos[tostring(index)] == nil then
                    dic_pos[tostring(index)] = t[i]
                end
            end
            dic_pos[i] = t[i]
        end
    end

    local tb_number = {}
    for number,count in pairs(dic_count) do
        if tonumber(count) ~= 1 then
            print("数字[ " .. number .. " ] 出现 [ " .. count .. " ]次")
            tb_number[#tb_number + 1] = number
        end
    end
    print("========================================")

    local T = {}
    for _,number in pairs(tb_number) do
        local _t = {}
        for pos,_number in pairs(dic_pos) do
            if number == tostring(_number) then
                table.insert(_t, pos)
            end
        end
        T[tostring(number)] = _t
    end

    for k,v in pairs(T) do
        print("数字[ ".. k .. " ]位置在")
        print("-------------------------")
        if type(v) == "table" then
            for _, _v in pairs(v) do
                print(_v)
            end
        end
        print("-------------------------")
    end
end

function table.indexOf(array, value)
    if array then
        local i, max = 1, #array
        while i <= max do
            if array[i] == value then
                return i
            end
            i = i + 1
        end
    end
    return -1
end

seekNum(t)

原文地址:https://www.cnblogs.com/lxyang0928/p/11140011.html

时间: 2024-10-11 13:14:19

找出给定数组内有多少重复的数,并打印它们对应的位置。的相关文章

找出有序数组中绝对值最小的数

问题: 一个有序数组,值有可能有负值,也有可能没有,现需要找出其中绝对值最小的值. 方法1: 遍历数组,找到绝对值最小值,时间复杂度O(n),n为元素个数. 方法2: 二分查找,因为数组有序,可以利用二分查找,时间复杂度O(logn). 分析步骤: 如果第一个数为正数,说明整个数组没有负数,直接返回第一个数 如果最后一个数为负数,说明整个数组没有正数,直接返回最后一个数 数组元素有正有负,说明绝对值最小的元素肯定在正负数交界处,需要二分查找上场: 如果a[mid]<0,因为数组是升序,说明绝对值

找出给定数组的子数组,该子数组和恰好为给定目标数t----动态规划/递归/搜索(待完成)

编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true:不满足时返回false. 输入描述: 第一行是数据个数,第二行是输入的数据 输出描述: 返回true或false 输入例子: 4 1 5 -5 1 输出例子: true v1=int(raw_input()) v2=raw_input().split(' ') v2=map(int,v2) a=

给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。

ccf认证考试2013年12月第一题 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数. 输入的第二行有n个整数s1, s2, -, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n).相邻的数用空格分隔. 输出格式 输出这n个次数中出现次数最多的数.如果这样的数有多个,输出其中最小的一个. 样例输入 6 10 1 10 20 30 20 样例输出 10

程序员面试100题之十:快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值(转)

能否快速找出一个数组中的两个数字,让这两个数字之和等于一个给定的值,为了简化起见,我们假设这个数组中肯定存在至少一组符合要求的解. 假如有如下的两个数组,如图所示: 5,6,1,4,7,9,8 给定Sum= 10 1,5,6,7,8,9 给定Sum= 10 分析与解法 这个题目不是很难,也很容易理解.但是要得出高效率的解法,还是需要一番思考的. 解法一 一个直接的解法就是穷举:从数组中任意取出两个数字,计算两者之和是否为给定的数字. 显然其时间复杂度为N(N-1)/2即O(N^2).这个算法很简

面试题:在一个数组中有0-99之间的整数101个(数组无序),用高效方法找出其中的唯一的重复元素!

/* * 问题:找出101个数据中重复的元素 * 题目如下:现有0到99,共计100个整数,各不相同,将所有数放入一个数组,随机排布. *        数组长度101,多余的数字是0到99其中任意一个数(唯一重复的数字) *        请将这个重复的数字找出来 * 分析: *    A:把数组构造出来 *    B:把数组元素添加进去 *    C:对数组的元素进去打乱(随机分布) *    D:找出重复的元素 */ 这道题有三种方式:第一种用交换排序找出,第二种求数组的和再减去0-99,

(算法:二分查找)在排序数组中,找出给定数字出现的次数

题目: 在排序数组中,找出给定数字出现的次数 思路: 既然出现排序数组,很容易想到二分查找,时间复杂度为O(logn): 先通过二分查找找到最左边出现该数字的下标left(如果没找到,则返回-1),然后通过二分查找找到最右边出现该数字的下表right(如果没找到,则返回-1),然后right-left+1就是出现的次数: 代码: #include <iostream> using namespace std; int BinarySearchCount(int *array,int len,i

9.11排序与查找(五)——有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置

/** * 功能:有个排序后的字符串数组,其中散布着一些空字符串,找出给定字符串的位置. */ /** * 思路:对二分查找法做修改,与mid比较的地方,如果mid为空字符串,则将mid换到离它最近的非空字符串的位置. * @param strings * @param str * @return */ public static int search(String[] strings,String str){ if(strings==null||str==null||str=="")

[leetcode 周赛 160] 1237 找出给定方程的正整数解

1237 Find Positive Integer Solution for a Given Equation 找出给定方程的正整数解 问题描述 给出一个函数 f(x, y) 和一个目标结果 z,请你计算方程 f(x,y) == z 所有可能的正整数 数对 x 和 y. 给定函数是严格单调的,也就是说: f(x, y) < f(x + 1, y) f(x, y) < f(x, y + 1) 函数接口定义如下: interface CustomFunction { public: // Ret

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2:和bb,个数为2 必须存在重复的字符串才算,只出现一次的不算.可能存在多个相同长度的不同字符串,比如aaabbb. 分析:最直接的想法是利用两个指针循环遍历比较所有可能的子串,记录下所有子串长度,然后找到所有最大连续子串及其个数,时间复杂度为O(n^2).在网上看到一种利用