ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

给定一个数组,每个元素都会出现3次(一次除外)。找到那一个。 C ++解决方案

前开发者教程 十二月13,2018
Example 1:

Input: [1,1,3,1]
Output: 3

我们可以通过2种方法解决此问题:

  1. unordered_map
  2. XOR操作。

“ unordered_map”的解决方案与“单数”。

下面详细说明有关使用BIT操纵的解决方案。

如果问题是这样的:“一个元素出现一次,所有其他元素出现一次”,则解决方案是对元素进行XOR。原因是x ^ x = 0,所以所有成对的元素都将消失,仅留下孤独的元素。如果我们在此处尝试相同的策略,那么我们将得到不同元素的XOR,这不是我们想要的。

 

而是,上述算法执行以下操作:

到目前为止,所有元素已经出现一次的所有元素的异或

二进制是到目前为止已出现两次的所有元素的XOR

每次我们将x用作数组中的下一个元素时,都会出现以下三种情况:

如果这是x第一次出现,则将其异或

如果这是第二次出现x,则将其从1中取出(再次对其进行XOR),然后将其XOR运算为2

如果这是第三次出现x,则将其从1和2中取出。

因此,最后,它们将只是一个元素的XOR,即不再重复的孤独元素。我们需要查看5行代码以了解其工作原理:x = A [i]之后的5行。

#include<iostream>
#include<vector>
#include<unordered_map>

using namespace std;

int solution_using_unordered_map(vector<int> &nums) 
{
    unordered_map<int,int>mp;
    
    for(int i = 0;i < nums.size();i++)
        mp[nums[i]]++;
    
    unordered_map<int,int>::iterator it;
    
    for(it = mp.begin();it != mp.end();it++)
    {
        if(it->second < 3)
            return it->first;
    }
    
}


int solution_using_Bit_Manipulation(vector<int> &nums) 
{
    int 上es = 0; 
    int twos =0;
    int common_bit_mask;
    for(int i=0; i<nums.size();i++)
    {
        twos= twos|(ones&nums[i]);

        上es=ones^nums[i];

        common_bit_mask= ~(ones&twos);

        上es &=common_bit_mask;

        twos &=common_bit_mask;
    }
    return 上es;
}

int main()
{
 	vector<int> nums;
    nums.push_back(1);
    nums.push_back(1);
 	nums.push_back(1);
 	nums.push_back(2);

	cout<<"The result using unordered_map = "<<solution_using_unordered_map(nums)<<endl;
	cout<<"The result using XOR = "<<solution_using_Bit_Manipulation(nums)<<endl;

return 0;

}

输出:

使用unordered_map = 2的结果
使用XOR = 2的结果

 

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的

      <sub id="JuyrdNM"></sub>


          <button id="uYZFmOM" class="uWG9W3l"></button>

        <tt id="meBfG7W" class="mYfftYp"></tt>




              • <tt id="FOFlFk7" class="FXJX8QF"></tt>

                <section id="My676Lv" class="MQAo7WE"><font id="Oq2tSW0" class="OPSDPwq"></font></section>