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;
示例:这个题目很简单,一个循环就可以搞定。
为了直观,我们用例子来说明。
如果 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个元素会参与异或运算。
代码如下:
这个算法的时间复杂度是O(n) 但我总觉得这个方法还不是最好的。
n,start 和最终结果res应该是存在一个对应关系的,如果能找到这个关系的数学表达形式,那么利用表达式计算,可以在O(1)内解决这个问题,可惜我没推导出来。
感兴趣的朋友可以试试,我觉得是可以的,如果发现了,欢迎交流分享。
java语言实现:Java 的实现和C语言的实现基本一致。。
代码如下:
Python 的实现和C语言的实现基本一致。
代码如下: