小编Jac*_*row的帖子

可变大小的bitset

我在数组上练习一个问题,我必须找到独特的元素.现在我的逻辑是找到数组中的max元素并为其定义bitset.但问题是bitset需要一个恒定的值,所以如何克服这个,下面是我的一些问题:

a)我可以用任何机会定义一个可变大小的bitset吗?
b)若没有,那么什么是用最好的方法vector<bool>还是vector<char>
c)我知道boost有一个动态bitset,但是当我这样做学习时,我想知道其他方法.

c++ bitset data-structures

12
推荐指数
1
解决办法
2万
查看次数

面试 - 在阵列中查找幅度极点

幅度极点:数组中的元素,其左侧元素小于或等于它,右侧元素大于或等于它.

示例输入

3,1,4,5,9,7,6,11
Run Code Online (Sandbox Code Playgroud)

期望的输出

4,5,11
Run Code Online (Sandbox Code Playgroud)

我在面试中被问到这个问题,我必须返回元素的索引,并且只返回满足条件的第一个元素.

我的逻辑

  1. 取两个MultiSet(这样我们也可以考虑复制),一个用于元素的右侧,一个用于元素的左侧(极点).
  2. 从第0个元素开始,将所有元素放在"右边的集合"中.
  3. 如果第0个元素小于或等于"right set"上的所有元素,则返回其索引.
  4. 否则将其放入"左集"并从索引1处的元素开始.
  5. 遍历数组,每次从"左设置"中选择最大值,从"右设置"中选择最小值并进行比较.
  6. 在任何元素的任何时刻,其左边的所有值都在"左集"中,右边的值在"右集"中

int magnitudePole (const vector<int> &A) {  
   multiset<int> left, right;        
   int left_max, right_min;          
   int size = A.size();
   for (int i = 1; i < size; ++i)
       right.insert(A[i]);
   right_min = *(right.begin()); 
   if(A[0] <= right_min)
       return 0;
   left.insert(A[0]);
   for (int i = 1; i < size; ++i) {
       right.erase(right.find(A[i]));
       left_max = *(--left.end());
       if (right.size() > 0)
           right_min = *(right.begin());
       if (A[i] > left_max && A[i] <= right_min)
           return …
Run Code Online (Sandbox Code Playgroud)

algorithm

6
推荐指数
1
解决办法
4457
查看次数

重写RecordReader以立即读取段落而不是行

我重写了RecordReader类的"next"方法和TextInputFormat类的"getRecordReader",以便将整个段落发送到mapper而不是逐行.(我正在使用旧api和defination为我的段落添加,直到我的文本文件中出现空白行.)
下面是我的代码:

public class NLinesInputFormat extends TextInputFormat  
{  
   @Override
   public RecordReader<LongWritable, Text> getRecordReader(InputSplit split, JobConf conf, Reporter reporter)throws IOException     {   
        reporter.setStatus(split.toString());  
        return new ParagraphRecordReader(conf, (FileSplit)split);
    }
}



public class ParagraphRecordReader implements RecordReader<LongWritable, Text> 
{
        private LineRecordReader lineRecord;
        private LongWritable lineKey;
        private Text lineValue;
        public ParagraphRecordReader(JobConf conf, FileSplit split) throws IOException {
            lineRecord = new LineRecordReader(conf, split);
            lineKey = lineRecord.createKey();
            lineValue = lineRecord.createValue();
        }

        @Override
        public void close() throws IOException {
            lineRecord.close();
        }

        @Override
        public LongWritable createKey() {
            return new LongWritable(); …
Run Code Online (Sandbox Code Playgroud)

hadoop

6
推荐指数
1
解决办法
1889
查看次数

查找下一个具有相同 1 位数量的较小数字的有效方法

我正在研究这个问题并提出一个解决方案(可能需要添加一个或两个条件),但不确定这是否是正确的方法,并且发现使用两个循环很麻烦,并且不确定这是否是正确的方法是做到这一点的有效方法。如果有人有一些好的技巧来做到这一点,或者任何更好的方法将受到欢迎:),那就太好了。(语言不是障碍)

我的算法:

  • 首先找到数字中的第一个“0”lsb 位
  • 然后找到紧邻该“0”位的下一个设置位
  • 将找到的“0”位更改为 1,将“1”位更改为“0”
  • 您将得到的数字更小
  • 如果所有位都已设置,那么您就没有任何具有相同数量“1”位的下一个较小的数字。
void nextSmaller(int number) {
    int firstZeroBitHelper = 1, nextOneBitHelper;
    while (firstZeroBitHelper < number) {
        // when we find first lsb zero bit we'll stop
        bool bit = number & firstZeroBitHelper;
        if (bit == false)
            break;
        firstZeroBitHelper = firstZeroBitHelper << 1;
    }

    if (firstZeroBitHelper >= number) {
        cout << "No minimum number exists" << endl;
        return;
    }

    nextOneBitHelper = firstZeroBitHelper;
    nextOneBitHelper = nextOneBitHelper << 1;

    while (nextOneBitHelper < number) {
        // when …
Run Code Online (Sandbox Code Playgroud)

algorithm binary

5
推荐指数
1
解决办法
3083
查看次数

无序映射相等功能c ++

可能这很容易,但我只是想了解我们是否可以这样做:

假设我们有一个unordered_map(string, string)默认情况下,如果两个字符串相等,它将检查相等性.

现在,假设我们在相等运算符中再添加一个函数,即使两个字符串是彼此的字符串,也会返回true.为此,我们是否只能更新相等运算符而不是hasher(并使用默认的hasher).

例如,仅定义仿函数:

bool operator() (const string& a, const string& b) const  
{  
    // check for anagram condition here  
}
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map

4
推荐指数
1
解决办法
418
查看次数

退货声明检查条件

我知道这很简单,但我无法理解它实际上是如何工作的是片段:

int test(int a, int b)
{
   return (a==b);
}
Run Code Online (Sandbox Code Playgroud)

如果匹配则返回语句返回1,否则返回0.
a)这里究竟发生了什么?
b)当我们只是想比较并返回而不是使用if和else时,这是一个更好的想法吗?

c++ return

3
推荐指数
1
解决办法
5473
查看次数