住房建设厅网站,win7装什么版本wordpress,微信登录 网站开发,龙岗公司的网站制作一、试题给出一个数组#xff0c;将数组中的元素往右边移动k个位置#xff0c;当中k是非负数。比如说#xff1a;输入:[1,2,3,4,5,6,7]和k3输出:[5,6,7,1,2,3,4]解释:往右边旋转1步:[7,1,2,3,4,5,6]往右边旋转2步:[6,7,1,2,3,4,5]往右边旋转3步:[5,6,7,1,2,3,4]*反映#x…一、试题给出一个数组将数组中的元素往右边移动k个位置当中k是非负数。比如说输入:[1,2,3,4,5,6,7]和k3输出:[5,6,7,1,2,3,4]解释:往右边旋转1步:[7,1,2,3,4,5,6]往右边旋转2步:[6,7,1,2,3,4,5]往右边旋转3步:[5,6,7,1,2,3,4]*反映1.竭尽所能想到越多的解决方案起码有三种不一样的方法能够处理这个问题。2.必须要使用空间复杂度为O(1)的原地算法。二解题算法解法一以倒数第k个值为分界线把nums截成两组再搭配。由于k可能超过nums的长度(当这两者一样的过程中就等同于nums不存在移动)故此大家取k%len(nums)k和nums的长度取余便是最终大家必须要移动的位置代码给出if nums:k k % len(nums)nums[:]nums[-k:]nums[:-k]时间64ms假设nums [1,2,3,4,5,6,7]k 3运行结果[5, 6, 7, 1, 2, 3, 4]解法二先把nums最后一位移动到第一位随后删除最后一位循环k次。kk%len(nums)取余代码给出if nums:k k % len(nums)while k 0:k - 1nums.insert(0, nums[-1])nums.pop()时间172ms假设nums [1,2,3,4,5,6,7]k 3运行结果[5, 6, 7, 1, 2, 3, 4]解法三先把nums复制到old_nums随后nums中索引为x的元素移动k个位置后,当前索引为xk其值为old_nums[x]。故此大家把xk处理成(xk)%len(nums),取余操作减少重复的次数。代码给出if nums:old_nums nums[:]l len(nums)for x in range(l):nums[(xk) % l] old_nums[x]时间64ms假设nums [1,2,3,4,5,6,7]k 3运行结果[5, 6, 7, 1, 2, 3, 4]