zoukankan      html  css  js  c++  java
  • 数组中数字出现的次数

    1  我想的是用map  key放值,value放次数。 

    但是好像不太好

    class Solution {
    public:
        void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
    
            if(data.empty()||num1==NULL||num2==NULL)
            return; 
            numberof1( data.data(),data.size(), num1 ,num2);
             
        }

    public: void numberof1( int * ptr,int length, int * num1 ,int * num2) { map<int,int> mp; for(int i=0;i<length;i++){ mp[ptr[i]]++;//key值所对应的value++ } int i=0;int m=0; for( i=0;i<length;i++){ if(mp[ptr[i]]==1) {*num1=ptr[i]; m=i; break; } } for( i=m+1;i<length;i++){ if(mp[ptr[i]]==1) { *num2=ptr[i]; break; } } } };

    2 set 也可以

    遍历输入的vector,当前数字不在set中则插入,否则从set删除(出现两次的数字)

    这样结束遍历后set中剩余的就是要找的那两个只出现了一次的数字

    class Solution {
    public:
        void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
            set<int> save;
            set<int>::iterator iter;
            for (int i = 0; i < data.size(); i++){
                if (save.find(data[i]) == save.end())
                    save.insert(data[i]);
                else{
                    iter = save.find(data[i]);
                    save.erase(iter);
                }
            }
            iter = save.begin();
            *num1 = *iter;
            *num2 = *(++iter);
        }
    };

    3 异或   位运算  本题考查点

    链接:https://www.nowcoder.com/questionTerminal/e02fdb54d7524710a7d664d082bb7811?f=discussion
    来源:牛客网
    
    class Solution {
    public:
        void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
      if(data.size()<2)
       return ;
      int size=data.size();
      int temp=data[0];
      for(int i=1;i<size;i++)
       temp=temp^data[i];
      if(temp==0)
       return ;
      int index=0;
      while((temp&1)==0){
       temp=temp>>1;
       ++index;
      }
      *num1=*num2=0;
      for(int i=0;i<size;i++)
      {
       if(IsBit(data[i],index))
        *num1^=data[i];
       else
        *num2^=data[i];
      }
        }
     bool IsBit(int num,int index)
     {
      num=num>>index;
      return (num&1);
     }
    };
  • 相关阅读:
    Model、ModelMap和ModelAndView的使用详解
    maven的pom.xml配置json依赖
    int和Integer的区别
    SSM 视频
    2018-1-25 PHP数组
    2018-1-25 PHP函数方法
    2018-1-22 PHP 变量和常量
    2018-1-21 复习
    2018-1-18 如何用html和css实现div的缓慢移动效果
    2018-1-17 js弹出div登录窗口
  • 原文地址:https://www.cnblogs.com/cgy1012/p/11422579.html
Copyright © 2011-2022 走看看