Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在数组中查找多数元素(对于具有长整数输入的特定情况,获取错误的输出)_C++_Output - Fatal编程技术网

C++ 在数组中查找多数元素(对于具有长整数输入的特定情况,获取错误的输出)

C++ 在数组中查找多数元素(对于具有长整数输入的特定情况,获取错误的输出),c++,output,C++,Output,我正在解决一个多数元素的问题,在这个问题中,我将得到一个int'n',后跟一个大小为n的数组作为输入。如果数组中任何元素的频率大于n/2,则返回1,否则返回0。现在,我的程序可以正确地处理整型元素的小值,但对于较大的int值,它会给出错误的输出 以下是源代码 #include <algorithm> #include <iostream> #include <vector> using std::vector; int get_majority_eleme

我正在解决一个多数元素的问题,在这个问题中,我将得到一个int'n',后跟一个大小为n的数组作为输入。如果数组中任何元素的频率大于n/2,则返回1,否则返回0。现在,我的程序可以正确地处理整型元素的小值,但对于较大的int值,它会给出错误的输出

以下是源代码

#include <algorithm>
#include <iostream>
#include <vector>

using std::vector;

int get_majority_element(vector<int> &a) {
  int count{};
  std::sort(a.begin(),a.end());
  for( size_t i{}; i<a.size() ; ++i ){         //counter
    for( size_t j = i+1 ; j<a.size() ; ++j ){
      if( a.at(i) == a.at(j) ){
        count += 1;  // may have to inclue a count nullifier if two elements are repeated
      }
    }
  }
  if( count > ( a.size()/2 ) ){
    return 1;
  }
  else {
    return 0;  
  }

}

int main() {
  int n;
  std::cin >> n;
  vector<int> a(n);
  for (size_t i = 0; i < a.size(); ++i) {
    std::cin >> a.at(i);
  }
  std::cout << get_majority_element(a) << '\n';

  return 0;
}
#包括
#包括
#包括
使用std::vector;
int get_多数元素(向量&a){
整数计数{};
排序(a.begin(),a.end());
对于(size_t i{};i>n;
向量a(n);
对于(大小i=0;i>a.at(i);
}
std::cout和你一样

  • 您不需要
    std::sort
  • 您需要重置
    计数
  • 检查应在外回路中进行
复杂性:
O(n)


关于信息,还有一种算法可以线性执行,包括找到可能的候选对象,然后检查它。

谢谢,我真的很感激你的算法,但现在的问题是我不明白我的代码有什么问题?如果我必须更改代码,那么我应该先了解我的错误。如果你能帮助我,那就太好了那:)在你的算法中,
count
应该代表什么?它实际计算的是什么?count计算一个元素被重复的次数,或者说数组中元素的频率。这是你期望的。但是你计算整个向量的
count
(不重置它),所以你计算所有相等的对。
{1,1,2,2}
的结果是2。而你期望的是1然后0,然后1然后0。@SudhanshuShekhar你很幸运你的前两次试验都能成功,因为它们实际上相当于
2+1
3+2+1
。而你的第三次试验实际上是
4+3+2+1
bool get_majority_element(const vector<int> &a) {
  for (size_t i{}; i < a.size() ; ++i) {
    int count{};
    for (size_t j = i+1 ; j<a.size() ; ++j) {
      if (a.at(i) == a.at(j)){
        count += 1;
      }
    }
    if (count > ( a.size()/2 )) {
      return true;
    }
  }
  return false;  
}
bool get_majority_element(const vector<int> &a) {
    for (size_t i{}; i < a.size() ; ++i) {
        if (std::count(a.begin() + i, a.end(), a[i]) > a.size() / 2) {
          return true;
        }
    }
    return false;  
}
bool get_majority_element(vector<int> &a) {
    std::sort(a.begin(), a.end());

    for (auto it = a.begin(); it != a.end(); /*empty*/) {
        auto next = std::find_if(it, a.end(), [&](int n){ return n != *it; });

        if (std::distance(it, next) > a.size() / 2) {
            return true;
        }
        it = next;
    }
    return false;  
}