数据结构—数组

一;数组

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))
posted @ 2024-09-08 18:50  Gsupl.落浅~  阅读(11)  评论(0编辑  收藏  举报