• [LeetCode] 136. Single Number(只出现一次的数)


    [LeetCode] 136. Single Number(只出现一次的数)

    Description

    Given a non-empty array of integers nums, every elements appears twice except for one. Find that single one.

    给定一个非空整数数组 num,数组内除了一个数外,其余数都出现了两次。找到那个只出现了一次的数。

    Follow up: Could you implement a solution with a linear runtime complexity and without using extra memory?

    进阶:你能在线性时间内,使用常数额外空间解决该问题吗?

    Examples

    Example 1

    Input: nums = [2,2,1]
    Output: 1
    

    Example 2

    Input: nums = [4,1,2,1,2]
    Output: 4
    

    Example 3

    Input: nums = [1]
    Output: 1
    

    Constraints

    • 1 <= nums.length <= 3 * 10^4

    • -3 * 10^4 <= nums[i] <= 3 * 10^4

    • Each element in the array appears twice except for one element which appears only once.

    Solution

    这题的一种解法是统计各数字出现的次数,然后再找出其中只出现了一次的那个数。

    然而注意到题目中所有数,除了待寻找的那个数,其余数都出现了两次,又根据异或运算的性质 (x ext{xor}x = 0),于是可以想到将数组中的所有元素用异或运算运算一遍,运算结果即为所求。具体代码如下。

    class Solution {
        fun singleNumber(nums: IntArray): Int {
            return nums.reduce { acc, i -> acc xor i }
        }
    }
    

    借助于 Kotlin 的 reduce 方法,可以把解答的代码缩减至一行。reduce 方法是数组和集合的扩展方法之一,其接收一个 lambda 表达式。返回对集合中的每个元素应用该 lambda 计算得到的结果。

    对于 Kotlin 用户来说,需要注意的是 lambda 表达式内的 return 是隐性的(采用 lambda 内最后一条语句的计算结果),这里如果显式写出 return 反而得不到预期的结果。

  • 相关阅读:
    Lucene学习总结之一:全文检索的基本原理
    Solr学习和总结(线下1)
    HBase学习系列
    Hadoop家族系列文章
    SQL on Hadoop系统的最新进展(1)
    【转】redis数据库入门教程(全面详细)+面试问题
    Redis(1.3)Redis的基本特性(事务、多数据库)
    (5.15)mysql高可用系列——mysql mha实践
    Redis(1.2)Redis的数据结构与基本操作
    mysql函数使用报错
  • 原文地址:https://www.cnblogs.com/zhongju/p/13776369.html
Copyright © 2020-2023  润新知