列表

详情


1486. 数组异或操作

给你两个整数,nstart

数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length

请返回 nums 中所有元素按位异或(XOR)后得到的结果。

 

示例 1:

输入:n = 5, start = 0
输出:8
解释:数组 nums 为 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
     "^" 为按位异或 XOR 运算符。

示例 2:

输入:n = 4, start = 3
输出:8
解释:数组 nums 为 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.

示例 3:

输入:n = 1, start = 7
输出:7

示例 4:

输入:n = 10, start = 5
输出:2

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int xorOperation(int n, int start) { } };

rust 解法, 执行用时: 0 ms, 内存消耗: 2 MB, 提交时间: 2023-09-12 17:45:08

impl Solution {
    pub fn xor_operation(n: i32, start: i32) -> i32 {
        (1..n).map(|x| 2*x + start).fold(start, |acc, x| acc^x)
    }
}

/* 解法二
impl Solution {
    pub fn xor_operation(n: i32, start: i32) -> i32 {
        (start..)
            .step_by(2)
            .take(n as usize)
            .fold(0, |i, j| i ^ j)
    }
}
*/

java 解法, 执行用时: 0 ms, 内存消耗: 37.8 MB, 提交时间: 2023-09-12 17:43:34

class Solution {
    public int xorOperation(int n, int start) {
        int ans = 0;
        for (int i = 0; i < n; ++i) {
            ans ^= (start + i * 2);
        }
        return ans;
    }
}

java 解法, 执行用时: 0 ms, 内存消耗: 37.9 MB, 提交时间: 2023-09-12 17:43:20

class Solution {
    public int xorOperation(int n, int start) {
        int s = start >> 1, e = n & start & 1;
        int ret = sumXor(s - 1) ^ sumXor(s + n - 1);
        return ret << 1 | e;
    }

    public int sumXor(int x) {
        if (x % 4 == 0) {
            return x;
        }
        if (x % 4 == 1) {
            return 1;
        }
        if (x % 4 == 2) {
            return x + 1;
        }
        return 0;
    }
}

javascript 解法, 执行用时: 60 ms, 内存消耗: 40.8 MB, 提交时间: 2023-09-12 17:43:03

/**
 * @param {number} n
 * @param {number} start
 * @return {number}
 */
var xorOperation = function(n, start) {
    let s = start >> 1, e = n & start & 1;
    let ret = sumXor(s - 1) ^ sumXor(s + n - 1);
    return ret << 1 | e;
};

const sumXor = (x) => {
    if (x % 4 === 0) {
        return x;
    }
    if (x % 4 === 1) {
        return 1;
    }
    if (x % 4 === 2) {
        return x + 1;
    }
    return 0;
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2023-09-12 17:42:45

func sumXor(x int) int {
    switch x % 4 {
    case 0:
        return x
    case 1:
        return 1
    case 2:
        return x + 1
    default:
        return 0
    }
}

func xorOperation(n, start int) (ans int) {
    s, e := start>>1, n&start&1
    ret := sumXor(s-1) ^ sumXor(s+n-1)
    return ret<<1 | e
}

python3 解法, 执行用时: 44 ms, 内存消耗: 16 MB, 提交时间: 2023-09-12 17:42:17

class Solution:
    def xorOperation(self, n: int, start: int) -> int:
        from functools import reduce
        return reduce(lambda x, y: x ^ (start+y*2), range(n), 0)

python3 解法, 执行用时: 48 ms, 内存消耗: 16 MB, 提交时间: 2023-09-12 17:40:09

class Solution:
    def xorOperation(self, n: int, start: int) -> int:
        ans = 0
        for i in range(n):
            ans ^= (start + i * 2)
        return ans

php 解法, 执行用时: 12 ms, 内存消耗: 18.7 MB, 提交时间: 2023-09-12 17:38:34

class Solution {

    /**
     * @param Integer $n
     * @param Integer $start
     * @return Integer
     */
    function xorOperation($n, $start) {
        if ( $n == 1 ) return $start;
        return array_reduce(range(1, $n-1), function($a, $b) use($start) {
            return $a ^ ($start + 2 * $b);
        }, $start);
    }
}

php 解法, 执行用时: 8 ms, 内存消耗: 18.9 MB, 提交时间: 2023-09-12 17:32:17

class Solution {

    /**
     * @param Integer $n
     * @param Integer $start
     * @return Integer
     */
    function xorOperation($n, $start) {
        $ans = $start;
        for ( $i = 1; $i < $n; $i++ ) {
            $ans ^= $start + 2 * $i;
        }
        return $ans;
    }
}

golang 解法, 执行用时: 0 ms, 内存消耗: 1.9 MB, 提交时间: 2021-06-09 10:33:07

func xorOperation(n int, start int) int {
	ans := start
	for i := 1; i < n; i++ {
		ans ^= start + 2 * i
	}
	return ans
}

上一题