leetcode 2
python数组
1.数组
1.1数组基础知识
数组(Array):一种线性表数据结构。它使用一组连续的内存空间,来存储一组具有相同类型的数据。
数组的基本操作:
访问元素
# 从数组 nums 中读取下标为 i 的数据元素值
def value(nums, i):if 0 <= i <= len(nums) - 1:print(nums[i])arr = [0, 5, 2, 3, 7, 1, 6]
value(arr, 3)
查找元素
# 从数组 nums 中查找元素值为 val 的数据元素第一次出现的位置
def find(nums, val):for i in range(len(nums)):if nums[i] == val:return ireturn -1arr = [0, 5, 2, 3, 7, 1, 6]
print(find(arr, 5))
插入元素
(在数组尾部插入值为 val 的元素)
arr = [0, 5, 2, 3, 7, 1, 6]
val = 4
arr.append(val)
print(arr)
(在数组第 i 个位置上插入值为 val 的元素)
arr = [0, 5, 2, 3, 7, 1, 6]
i, val = 2, 4
arr.insert(i, val)
print(arr)
改变元素
def change(nums, i, val):if 0 <= i <= len(nums) - 1:nums[i] = valarr = [0, 5, 2, 3, 7, 1, 6]
i, val = 2, 4
change(arr, i, val)
print(arr)
删除元素
(删除数组尾部元素)
arr = [0, 5, 2, 3, 7, 1, 6]
arr.pop()
print(arr)
(删除数组第 i 个位置上的元素)
arr = [0, 5, 2, 3, 7, 1, 6]
i = 3
arr.pop(i)
print(arr)
(基于条件删除元素)
arr = [0, 5, 2, 3, 7, 1, 6]
i = 3
arr.remove(5)
print(arr)
思路:我自己思路和思路二相似,但是没有想到,需要多次便利,才能遍历所有元素。参见思路二
- 如图所示,1->3、3->5、5->1是一个轮回,2->4、4->6、6->2是第二个轮回,两个轮回可以原地完成对数组的轮转。问题在于需要轮转几次,每次轮转何时结束。
- 每次轮转何时结束:当重新回到本轮回第一个元素是结束,也就是第一个轮回到1,第二个轮回到2时结束。
- 需要轮转几回(走了整数数量的圈):因为从 0 开始不断遍历,最终又回到起点 0,这个过程走了a圈(a正为整数),每圈的长度为n。 这个过程中,走的每一步的长度为k,共走过了b个元素,所以走的总步长为bk,也即这a圈的长度,即an=bk。 即 an 一定为 n,k 的公倍数。又因为我们在第一次回到起点时就要结束,因此a要最小,故an就是n,k的最小公倍数lcm(n,k) , 因此 b 就为lcm(n,k)/k,这说明从起点再次回到起点的过程中会访问到 lcm(n,k)/k 个元素。 为了访问到所有的元素,我们需要进行遍历的次数为,n/lcm(n,k)/k = n*k/lcm(n,k) = gcd(n,k)(最大公约数和最小公倍数的关系) 即需要遍历的次数为n和k的最大公约数。
答案:
from typing import Listclass Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)k = k % ncount = self.gcd(k, n)for i in range(count):start = ipre = nums[i+k]nums[i+k] = nums[i]i = (i+k)%nwhile i != start:rear = nums[ (i+k) % n ]nums[(i+k) % n] = prepre = reari = (i+k)%nprint(nums)def gcd(self,a, b):if(b==0):return a else:return self.gcd(b,a%b) if __name__ == '__main__':a = Solution()nums = [-1,-100,3,99]k = 2a.rotate(nums, k)# https://www.cnblogs.com/easonbook/p/12876402.html 关于List报错的解决
思路参考:思路二
通过推导得到
答案:
from typing import Listclass Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n = len(matrix)for i in range(n//2):for j in range( (n+1) // 2):temp = matrix[i][j]matrix[i][j] = matrix[n-j-1][i]matrix[n-j-1][i] = matrix[n-i-1][n-j-1]matrix[n-i-1][n-j-1] = matrix[j][n-i-1]matrix[j][n-i-1] = tempprint(matrix)if __name__ == '__main__':matrix = [[1,2,3],[4,5,6],[7,8,9]]a = Solution()a.rotate(matrix)
leetcode 2相关推荐
- leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间
题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...
- LeetCode 10. Regular Expression Matching python特性、动态规划、递归
前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...
- leetcode Longest Substring with At Most Two Distinct Characters 滑动窗口法
题目解析 代码如下 题目解析 这一题是一道会员的题目,题目介绍如下: Given a string, find the length of the longest substring T that c ...
- leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法
题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...
- leetcode:2680 Remove Duplicates from Sorted Array 删除数组中的重复元素
leetcode:26 对数组元素进行去重,使得原数组重复元素最多保留1个 限制: 我们不可以额外分配数组,必须保持空间复杂度为O(1) 这个并不难实现: class Solution(object) ...
- LeetCode简单题之二进制表示中质数个计算置位
题目 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数. 计算置位位数 就是二进制表示中 1 的个数. 例如, 21 ...
- LeetCode简单题之删除字符使字符串变好
题目 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 的字符,使它变成一个 好字符串 . 请你返回删除后的字符串.题目数据保证答案总 ...
- LeetCode简单题之找出两数组的不同
题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,请你返回一个长度为 2 的列表 answer ,其中: answer[0] 是 nums1 中所有 不 存在于 nums2 中的 ...
- LeetCode中等题之区域和检索 - 数组可修改
题目 给你一个数组 nums ,请你完成两类查询. 其中一类查询要求 更新 数组 nums 下标对应的值 另一类查询要求返回数组 nums 中索引 left 和索引 right 之间( 包含 )的nu ...
- LeetCode简单题之整理字符串
题目 给你一个由大小写英文字母组成的字符串 s . 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 若 s ...
最新文章
- nagios+mysql+ndo2安装总结
- 科研经验1:云笔记积累个人知识体系
- 百度高德位置定位服务器,调用百度、高德地图App,百度地图网页版,App定位
- Pandas简明教程:四、Pandas数据索引方式
- 【Flask】ORM多对多关联关系
- ecshop百度编辑器远程下载无后缀的图片,并且加水印
- 职场人必读的10个经典励志小故事
- php协程和goroutine,golang中四种方式实现子goroutine与主协程的同步
- ADBPGGreenplum成本优化之磁盘水位管理
- android 贝塞尔曲线_OpenGL 实践之贝塞尔曲线绘制
- 完全二叉树子节点个数
- 阿里人告诉你毕业3年,为何技术能力相差越来越大?
- 在 windows 下安装 Boost 1.62.0
- access的papersize命令_如何在报表中使用自定义尺寸的纸张
- [ROS2 基础] 仿真系统和搭建方法
- linux 录制软件下载,Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)
- 科技如何激发女权主义并改变男性气质
- 今天就给大家介绍一个抢购茅台的小技巧,不需要安装Python,不需要配置环境,就和你在电脑上安装使用QQ等软件一样
- 迅雷下载GitHub文件提示需要授权或登录等
- 二进制位运算 左移与右移