快捷搜索:  汽车  科技

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)注:返回的所有元素的按顺序逐次XOR的结果。LeetCode 1486. 一维数组逐次异或的结果(XOR Operation in an Array)给定一个整数n和一个整数start。以此产生出一个数组nums,其中nums[i] = start 2*i(i大于等于0),n == nums.length。

技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后到中级难度,最后到hard难度全部完。目前我选择C语言,python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和精力有限,其他语言的实现有兴趣的朋友请自己尝试。

如果有任何问题可以在文章后评论或者私信给我。

如果有朋友希望我讲些其他话题,请在评论区留言或者私信给我。

持续分享,敬请关注。

LeetCode 1486. 一维数组逐次异或的结果(XOR Operation in an Array)

问题描述:

给定一个整数n和一个整数start。

以此产生出一个数组nums,其中nums[i] = start 2*i(i大于等于0),n == nums.length。

返回的所有元素的按顺序逐次XOR的结果。

注:

· 1 <= n <= 1000;

· 0 <= start <= 1000;

· n == nums.length;

示例:

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(1)

C语言实现:

这个题目很简单,一个循环就可以搞定。

为了直观,我们用例子来说明。

如果 n = 1, start = 1。那么生成的 nums = [1] 只有一个元素,不存在异或操作,最后要返回的结果res = 1。

如果 n = 4, start = 1。那么生成的 nums = [1 3 5 7],最后要返回的结果res = 1^3^5^7。即先计算出1^3的结果,然后拿这个结果再^5,得到另一个结果再^7。

根据这两个例子,我们可以将res初始化为nums[0],即start。 然后用 ^= 运算符计算res和下一个元素的异或结果并重新赋值给res,如此这样,遍历n-1次就可以得出最终的res的结果。

注意仅仅需要遍历n-1次,因为在遍历之前,res已经被赋值为nums[0]了,后面还有n-1个元素会参与异或运算。

代码如下:

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(2)

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(3)

这个算法的时间复杂度是O(n) 但我总觉得这个方法还不是最好的。

n,start 和最终结果res应该是存在一个对应关系的,如果能找到这个关系的数学表达形式,那么利用表达式计算,可以在O(1)内解决这个问题,可惜我没推导出来。

感兴趣的朋友可以试试,我觉得是可以的,如果发现了,欢迎交流分享。

java语言实现:

Java 的实现和C语言的实现基本一致。。

代码如下:

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(4)

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(5)

python语言实现:

Python 的实现和C语言的实现基本一致。

代码如下:

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(6)

leetcode54螺旋矩阵讲解(LeetCode基础算法题第186篇)(7)

猜您喜欢: