137. 只出现一次的数字 II

1.题目:

137. 只出现一次的数字 II_第1张图片

2.我的代码:

C++:

class Solution {
public:
    // 使用位操作
    int singleNumber(vector& nums) {
        int ret = 0;
        for (int i = 0; i < 32; ++i)
        {
            int total = 0;
            for (int j = 0; j < nums.size(); ++j)
            {
                total += (nums[j] >> i) & 1;
            }

            total %= 3;
            ret += total << i;
        }
        return ret;
    }
};

Java:

class Solution {
    public int singleNumber(int[] nums) {
        Map map = new HashMap();
        for (int temp : nums) {
            if (!map.containsKey(temp)) {
                map.put(temp, 1);
            } else {
                map.put(temp, map.get(temp) + 1);
            }
        }
        for (int temp : nums) {
            if (map.get(temp) == 1) {
                return temp;
            }
        }
        return 0;
    }
}

3.答案代码:
C++:

/*

*思路:

* 1. 先使用sort()函数对传入数组进行排序,获得一个有序序列

* 2. 再遍历该序列,如果遍历的点以下各节点为空或者与本节点值不相等,则该节点值就位只出现一个的数字

* 3. 否则节点向后移动3步,寻找下一个节点

*/

class Solution {

public:

  int singleNumber(vector& nums) 

  {

    sort(nums.begin(),nums.end());

		for(int i = 0; i < nums.size(); i+=3)

    {

			if(	((i+1) == nums.size()) || (nums[i]!=nums[i+1]) )

      {

				return nums[i];

			}

		}

		return nums[nums.size()-1];

  }

};

Java:

你可能感兴趣的:(leetcode,c++,算法,java)