热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

漫画:位运算系列篇(只出现一次的数字)

今天是小浩算法“365刷题计划”第62天。仍然分享一道关于位运算颇为简单的题型,同时,从明天开始将会提高难度,大家做好准备。01PARTS

今天是小浩算法“365刷题计划”第62天。仍然分享一道关于位运算颇为简单的题型,同时,从明天开始将会提高难度,大家做好准备。

01

PART

Single Number

这道题,大家先想一想是用什么思路进行求解?

第136题:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

(瞪一瞪就全部掌握)

PS:建议大家停留个两分钟先想一想...直接拉下去看题解就没什么意思了。

02

PART

题目分析

位运算的题目我们已经讲了好几道了,这道也不例外,也是其中一个非常典型的例子!属于必须掌握的题型。

直接分析,我们要找只出现一次的数字,并且已知了其他的数字都只出现了两次。那么这种一听其实就应该想到需使用位运算来进行求解。最好的,就是在读完题目的瞬间,直接条件反射!(当然,如果你现在第一反应是想到 通过遍历统计,或者其他如使用hashmap 等方式来进行求解,那我觉得你的位运算这块,是有必要加强练习力度的。如果你第一反应,连思路都没有,那我觉得对于整个算法的能力这块,都是比较欠缺的,需要下苦功!)

回到题目,如何使用位运算进行求解呢?对于任意两个数a和b,我们对其使用 “异或”操作,应该有以下性质:

  • 任意一个数和0异或仍然为自己:

    a⊕0=a

  • 任意一个数和自己异或是0:

    a⊕a=0

  • 异或操作满足交换律和结合律:

a⊕b⊕a=(a⊕a)⊕b=0⊕b=b

可能有人直接都不知道异或是什么,所以还是举个例子,比如5异或3,也就是5⊕3,也就是5^3,是下面这样:

根据分析,得出代码:(c++版本)

1//CPP2class Solution {3public:4    int singleNumber(vector& nums) {5        int ans = 0;6        for (int num : nums) {7            ans ^= num;8        }9        return ans;
10    }
11};

(java版本)

1//JAVA2class Solution {3    public int singleNumber(int[] nums) {4        int ans &#61; nums[0];5        for (int i &#61; 1; i < nums.length; i&#43;&#43;) {6            ans &#61; ans ^ nums[i];7        }8        return ans;9    }
10}

(python版本)

1//py
2class Solution:
3    def singleNumber(self, nums: List[int]) -> int:
4        ans &#61; 0
5        for i in range(len(nums)):
6            ans ^&#61; nums[i]
7        return ans

郑重申明&#xff08;读我的文章必看&#xff09;&#xff1a;

  • 本系列所有教程都不会用到复杂的语言特性&#xff0c;不需要担心没有学过相关语法&#xff0c;使用各语言纯属本人爱好。

  • 作为学术文章&#xff0c;虽然风格可以风趣&#xff0c;但严谨&#xff0c;我是认真的。本文所有代码均在leetcode上进行过测试运行。

  • 算法思想才是最重要的。

03

PART

题目进阶

如果修改上面的题目&#xff0c;除了某个元素只出现一次&#xff0c;其余元素都出现了3次以上&#xff0c;那么该如何求解&#xff1f;

修改一个条件之后&#xff0c;本题的难度大幅度提升&#xff01;“异或”的方式看起来似乎没办法运用在“其余数出现3次以上”的条件中。那对于这种问题又该如何求解&#xff1f;我这里给出几种思路&#xff0c;大家下去分析一下&#xff0c;明天我会公布这道衍化题型的解决方案&#xff1a;

  • 思路1&#xff1a;使用hashmap&#xff0c;统计每个数字出现的次数&#xff0c;最后返回次数为1的数字。。。然后等待一段时间&#xff0c;接到很遗憾的通知。

  • 思路2&#xff1a;上面的题目&#xff0c;对于相同的两个数&#xff0c;进行异或运算&#xff0c;我们可以进行“抵消”&#xff0c;那是否可以找到一种方式&#xff0c;来让相同的三个数进行相互抵消呢&#xff1f;

  • 思路3&#xff1a;是不是可以通过数学的方式来进行计算&#xff1f;

&#xff08;这货就是不直接说出来&#xff0c;你说气人不气人&#xff01;&#xff09;

想复习一下其他位运算题目的&#xff0c;可以看&#xff1a;

漫画&#xff1a;三分钟学习一道位运算的面试题&#xff0c;万一遇到了呢&#xff1f;

漫画&#xff1a;位运算技巧助你俘获offer

所以&#xff0c;今天的问题你学会了吗&#xff1f;评论区留下你的想法&#xff01;

1. 全栈架构之打包推荐【建议收藏&#xff0c;常读】

2. 一个空格引发的“惨案“

3. 分布式系统中Session共享的常用方案

4. Java语言“坑爹”排行榜TOP 10

5. 我是一个Java类&#xff08;附带精彩吐槽&#xff09;

6. mysql索引失效&#xff0c;差点我的工作凉了

7. 既生synchronized&#xff0c;何生volatile&#xff1f;

8. 微服务一直火&#xff0c;为什么服务化要搞懂&#xff1f;

9. MySQL的COUNT语句&#xff0c;不简单&#xff01;

10. 漫画&#xff1a;HashSet和TreeSet实现与原理

扫码二维码关注我

·end·

—如果本文有帮助&#xff0c;请分享到朋友圈吧—

我们一起愉快的玩耍&#xff01;

你点的每个赞&#xff0c;我都认真当成了喜欢


推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍如何通过整合SparkSQL与Hive来构建高效的用户画像环境,提高数据处理速度和查询效率。 ... [详细]
  • 本周三大青年学术分享会即将开启
    由雷锋网旗下的AI研习社主办,旨在促进AI领域的知识共享和技术交流。通过邀请来自学术界和工业界的专家进行在线分享,活动致力于搭建一个连接理论与实践的平台。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • 深入解析WebP图片格式及其应用
    随着互联网技术的发展,无论是PC端还是移动端,图片数据流量占据了很大比重。尤其在高分辨率屏幕普及的背景下,如何在保证图片质量的同时减少文件大小,成为了亟待解决的问题。本文将详细介绍Google推出的WebP图片格式,探讨其在实际项目中的应用及优化策略。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 本文将探讨如何在 Struts2 中使用 ActionContext 和 ServletActionContext 来获取请求参数和会话信息,同时解释它们的内部机制和最佳实践。 ... [详细]
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • mybatis 详解(七)一对一、一对多、多对多
    mybatis详解(七)------一 ... [详细]
  • 本文详细介绍了如何将Spring框架与Hibernate ORM框架进行集成,包括配置文件的设置和数据持久化操作的实现。 ... [详细]
author-avatar
mce
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有