数据结构—数组
一;数组
1、数组:在连续的内存空间当中;存储一组相同类型的元素
2、元素和索引:数组的索引下标从0开始
3、数组的访问和数组的搜索
(1)数组的访问
a=[1,2,3]
a[1]=2#数组的访问;通过下标索引进行访问
(2)数组的搜索
a=[1,2,3]
for i in a:
print(i)
4、数组的四种方法
访问 0(1)
搜索 0(n)
插入 o(n) :数组元素向前移动
删除o(n):数组元素向后移动
6、优缺点
适合读取操作;但是不适合写的操作!
#数组元素的常用操作
#创建数组
array=[1,2,3,4,5]
#添加元素
array.append(6)#添加单个元素
arrayay.extend([7,8])
#访问元素
array[0]#使用下表索引访问数组元素
#修改元素
array[0] = 10 # 修改第一个元素的值
#删除元素
del array[0]#删除第一个元素的值
array.remove(5)#删除值为5的元素
#遍历数组
for i in array:
print(i)
#查看元素
if 3 in array:
print("在数组当中")
#数组的长度
print(len(array))
#数组的排序
array.sort()#升序排序
array.sort(reverse=True) # 降序排序
二:LeetCode -数组
题目485 最大连续1的个数
(1)思路:使用双指针;一个记录最大连续的个数;一个记录当前连续一的个数;最后输出max_count
class Solution:
def findMaxConsecutiveOnes(self, nums) -> int:
max_count=0
count=0
for i in range(len(nums)):
if nums[i]==1:
count+=1
max_count=max(max_count,count)
else:
count=0
return max_count
nums = [1,0,1,1,0,1]
solution=Solution()
print(solution.findMaxConsecutiveOnes(nums))
题目283:移动零
(1)思路:题目要求原地移动;就不能创建新的容器;所以定义一个指针;将不是1的元素移到首部;然后将剩下的元素填充为0;输出nums
class Solution:
def moveZeroes(self, nums) -> None:
k=0
for i in range(len(nums)):
if nums[i]!=0:
nums[k]=nums[i]
k+=1
for i in range(k,len(nums)):
nums[i]=0
return nums
nums = [0,1,0,3,12]
solution=Solution()
print(solution.moveZeroes(nums))
题目27:移除元素
(1)思路:定义一个指针;记录不等于目标值的元素;然后讲元素放到数组的首部;然后输出
class Solution:
def removeElement(self, nums, val) -> int:
k = 0
for i in range(len(nums)):
if nums[i] != val:
nums[k] = nums[i]
k += 1
return k
nums = [3, 2, 2, 3]
val = 3
solution = Solution()
k = solution.removeElement(nums, val)
print(f"{k},{nums[:k]}")
题目28:查找特定位置
(1)判断数组元素是否和目标值相等;如果相等的话添加到新的容器当中;然后判断新的列表是否为空;不为空输出第一个和最后一个和目标值相等的元素
class Solution:
def searchRange(self, nums, target):
list = []
for i in range(len(nums)):
if nums[i] == target:
list.append(i)
if not list:
return [-1, -1]
return [list[0], list[-1]]
nums = [5, 7, 7, 8, 8, 10]
target = 8
solution = Solution()
print(solution.searchRange(nums, target))
题目136:只出现一次的数
(1)简单的异或
def func(nums):
key=0
for i in range(len(nums)):
key ^=nums[i]
return key
nums = [4,1,2,1,2]
flag = func(nums)
print(flag,end="")
题目1:两数和
(1)思路:使用双指针暴力解法;或者使用哈希表也可以实现
class Solution:
def func(self,nums,target):
for i in range(len(nums)):
for j in range(i+1,len(nums)):
if nums[i]+nums[j]==target:
return [i,j]
return ""
nums = [2,7,11,15]
target = 9
solution=Solution()
print(solution.func(nums,target))
作者:
Shu-How Z
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。