Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

找出给定数组中只出现一次的数字 #9

Open
MY729 opened this issue Aug 6, 2019 · 0 comments
Open

找出给定数组中只出现一次的数字 #9

MY729 opened this issue Aug 6, 2019 · 0 comments

Comments

@MY729
Copy link
Owner

MY729 commented Aug 6, 2019

题目来源-力扣

题目

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

例如,给定数组:

let arr = [1, 2, 3, 4, 4, 3, 2]

输出:

1

解析

根据给定数组的特性,只有一个数字是唯一的,其他数字都有两个

思路一

indexOf方法

从头遍历数组,返回要找的目标值的下标

lastIndexOf方法

从尾部遍历数组,返回要找的目标值的下标

利用 indexOf 和 lastIndexOf 方法来确定唯一的数,遍历数组,如果一个数重复出现两次,那么 indexOf 和 lastIndexOf返回的下标值不相同,如果相同,说明就是这个唯一的数

思路二

我们知道相同的数字异或运算结果为0
不为0的数字与0异或运算返回这个数字

利用异或运算的特性,可以找出数组的唯一值

答案

寻找下标的方法

let singleNumber = function(nums) {
    return nums.find(item => nums.indexOf(item) === nums.lastIndexOf(item))
}

执行结果:

singleNumber([1, 2, 3, 1, 2]) //调用
// 返回
3

异或运算方法

let singleNumber = function(nums) {
    return nums.reduce((total, num) => {
        return total ^ num
    })
}

执行结果:

singleNumber([1, 2, 3, 3, 4, 1, 2]) //调用
// 返回
4
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant