2

我有与http://www.cplusplus.com/forum/beginner/73928/上定义的完全相同的ElemList

true如果所有值都重复了两次或更多次,您能否提出一些关于如何编写返回函数的提示?例如

1,1,1,2,2 - true
1,2 - false

我有点觉得它肯定需要一个动态数组,但想不出算法。

4

3 回答 3

2

是的,std::map<int,int>在你计算列表中每个数字的出现次数的地方做一个。此计算需要遍历所有列表。

然后,再次遍历std::map刚刚创建的值,看看所有值是否大于或等于 2。

于 2013-03-19T12:57:51.547 回答
0

该函数看起来像这样(未经测试):

  std::map<int,int> m_mapCount;
  std::map<int,int>::iterator m_Iterator;

  for (l.start(); !l.end(); l.next()) // put the content of your linkedlist to map
  {
       m_mapCount[l.current->num] += 1;
  }

  for (m_Iterator=m_mapCount.begin(); m_Iterator!=m_mapCount.end(); m_Iterator++)
  {
      if(m_Iterator->second >= 2) return true;
  }
于 2013-03-19T13:22:55.337 回答
0
bool twoormore()
    {
        int count = 0;// for counting elements in list
        int temp;// temprorary element for sorting and logical part
        int cik;// how much times the value has been mentioned
        bool res = true;// function result
        int * arr;// pointer for the upcoming dynamic array
        for(start();!end();next())
        {
            count++;// counting the elements

        }
        if(count != 0){
            arr = new int[count];//creating array
            int i = 0;
            for(start();!end();next())
            {
                arr[i++] = current->num;//filling array
            }
            /** array sorting **/
            for(int i = 0;i < count;i++)
                for(int j = 0; j < count; j++)
                {
                    if(arr[j] > arr[i])
                    {
                        temp = arr[i];
                        arr[i] = arr[j];
                        arr[j] = temp;
                    }
                }
            /** sort ends **/
            temp = arr[0]; // setting first element ar temp.. for upcoming check
            cik = 1;// it's been its first time
            for(int i = 1;i < count;i++)
            {
                if(arr[i] == temp)
                {
                    cik++; continue;// if upciming element is equal to temprorary , then add 1 to counter.. and continue looping
                }else
                {
                    if(cik > 1)
                    {
                        temp = arr[i];// if everything ok, but element value changes.
                        cik = 1;// sets defualt
                        continue;
                    }
                    else
                    {
                        res = false;// other way, the value wasnt there two times
                        break;
                    }
                }


            }
            delete arr;//deleting allocated space for array
            return res;// returning bool, true or false.
        }
    }
于 2013-03-19T13:34:30.230 回答