当前位置: 首页 > news >正文

LeetCode 137. 只出现一次的数字 II 中等

题目 - 点击直达

  • 1. 137. 只出现一次的数字 II 中等
    • 1. 题目详情
      • 1. 原题链接
      • 2. 题目要求
      • 3. 基础框架
    • 2. 解题思路
      • 1. 思路分析
      • 2. 时间复杂度
      • 3. 代码实现

1. 137. 只出现一次的数字 II 中等

1. 题目详情

1. 原题链接

LeetCode 137. 只出现一次的数字 II 中等

2. 题目要求

给你一个整数数组 n u m s nums nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。

示例 1:
输入:nums = [2,2,3,2]
输出:3

示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99

提示:
1 < = n u m s . l e n g t h < = 3 ∗ 104 1 <= nums.length <= 3 * 104 1<=nums.length<=3104
− 231 < = n u m s [ i ] < = 231 − 1 -231 <= nums[i] <= 231 - 1 231<=nums[i]<=2311
n u m s nums nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

3. 基础框架

● Cpp代码框架

class Solution {
public:int singleNumber(vector<int>& nums) {}
};

2. 解题思路

1. 思路分析

( 1 ) (1) (1) 哈希映射的思想,把 n u m s nums nums数组中出现的数唯一映射到 u n o r d e r e d m a p < i n t , i n t > unordered_map<int, int> unorderedmap<int,int>中,第二个参数记录其出现的次数;
( 2 ) (2) (2) 遍历 n u m s nums nums数组,并记录每个元素出现的次数;
( 3 ) (3) (3) 再次遍历 n u m s nums nums数组,判断每个元素在 u n o r d e r e d m a p < i n t , i n t > unordered_map<int, int> unorderedmap<int,int>中出现的次数:

  • 如果元素出现的次数是1,则返回该元素;
  • 反之则继续判断下一个元素,直到 n u m s nums nums末尾为止。

2. 时间复杂度

O ( N ) O(N) O(N)

遍历了两遍数组 n u m s nums nums,每次循环内进行的操作都是常数次,总体是 2 ∗ N 2*N 2N

3. 代码实现

哈希映射

class Solution {
public:int singleNumber(vector<int>& nums) {// 哈希映射unordered_map<int, int> m;for(auto& e : nums){m[e]++;}for(auto& e : nums){if(m[e] == 1){return e;}}return -1;}
};

暴力模拟

class Solution {
public:int singleNumber(vector<int>& nums) {sort(nums.begin(), nums.end());int one = 0, two = 1, three = 2;while(one < nums.size()){if(one == nums.size() - 1 || nums[one] != nums[two]){return nums[one];}one += 3;two += 3;three += 3;}return -1;}
};

通用模拟计数

class Solution {
public:int singleNumber(vector<int>& nums) {sort(nums.begin(), nums.end());int first = 0;int second = 0;int len = 0;while(second < nums.size()){if(nums[first] != nums[second]){if(len == 1){break;}len = 0;first = second;}second++;len++;}return nums[first];}
};

T h e The The E n d End End

相关文章:

  • 【蓝桥杯选拔赛真题17】C++时间换算 第十二届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
  • USB偏好设置-Android13
  • 使用Go语言抓取酒店价格数据的技术实现
  • 人工智能模型转ONNX 连接摄像头使用ONNX格式的模型进行推理
  • 前端自动检查更新,适用Vue任何版本项目,包服务端更后客户端更新
  • 工作学习记录
  • UE5数字孪生制作-数据篇(二) - 数据处理
  • WGCLOUD实践 - wgToken怎么使用
  • nacos做服务配置和服务器发现
  • [LeetCode]-225. 用队列实现栈
  • 前端缓存机制——强缓存、弱缓存、启发式缓存
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • 前端Vue 页面滑动监听 拿到滑动的坐标值
  • 移除元素(双指针)
  • 目标检测回归损失函数(看情况补...)
  • ES6指北【2】—— 箭头函数
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Android系统模拟器绘制实现概述
  • css的样式优先级
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Magento 1.x 中文订单打印乱码
  • Netty 4.1 源代码学习:线程模型
  • React+TypeScript入门
  • 从伪并行的 Python 多线程说起
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 仿天猫超市收藏抛物线动画工具库
  • 深度解析利用ES6进行Promise封装总结
  • 通过npm或yarn自动生成vue组件
  • 微服务核心架构梳理
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $NOIp2018$劝退记
  • (8)STL算法之替换
  • (poj1.2.1)1970(筛选法模拟)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (南京观海微电子)——I3C协议介绍
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转载)Google Chrome调试JS
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net Web项目创建比较不错的参考文章
  • .net 受管制代码
  • .NET和.COM和.CN域名区别
  • @Query中countQuery的介绍
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [ 蓝桥杯Web真题 ]-布局切换
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [20161101]rman备份与数据文件变化7.txt
  • [C/C++]数据结构 循环队列
  • [cogs2652]秘术「天文密葬法」