热门标签 | 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;我都认真当成了喜欢


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
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社区 版权所有