• 面试题56


    题目地址:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-ii-lcof/

    题目描述

    在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。

    题目示例

    示例 1:

    输入:nums = [3,4,3,3]
    输出:4
    

    示例 2:

    输入:nums = [9,1,7,9,7,9,7]
    输出:1

    解题思路

    哈希表:使用哈希表将nums数组中的每个元素出现的次数计数,然后统计出现次数为1的元素,直接返回即可。

    排序+数学:分析题目可知,首先对数组nums排序,如果连续出现三个元素,则这三个元素必然相等并且排序在一起,接下来,遍历数组,我们让第一个元素和第三个元素对比,如果两者相同,则说明当下元素出现连续三次,数组下标自增3,否则,如果比较的第一个元素和第三个元素不相等,则此时的元素只出现了一次,即为所求元素。

    程序源码

    哈希表

    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            if(nums.size() == 0) return 0;
            unordered_map<int, int> mp;
            for(int i = 0; i < nums.size(); i++)
            {
                mp[nums[i]]++;
            }
            for(int j = 0; j < nums.size(); j++)
            {
                if(mp[nums[j]] == 1) return nums[j];
            }
            return 0;
        }
    };

    排序+数学

    class Solution {
    public:
        int singleNumber(vector<int>& nums) {
            if(nums.size() == 0) return 0;
            sort(nums.begin(), nums.end());
            for(int i = 0; i < nums.size() - 3; i += 3)
            {
                if(nums[i] != nums[i + 2])
                return nums[i];
            }
            return nums[nums.size() - 1];
        }
    };
    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    js练习 导航栏下拉子菜单
    js练习 DIV做下拉列表
    js添加事件
    HTML5音频和视频
    HTML5表单元素拓展
    document对象
    DOM
    函数
    常用的函数及递归
    JavaScript数组示例
  • 原文地址:https://www.cnblogs.com/wzw0625/p/12650824.html
Copyright © 2020-2023  润新知