初始化
本质:用需要的值覆盖已有的值
必须从前向后连续空间初始化,不可以出现空缺情况
基本操作
创建与初始化
#创建
list=[]
初始化,没看懂
查找一个元素
根据值是否相等进行线性查找
def findByElement(arr,size,key):
for i in range(size):
if arr[i]==key:
return i
return -1
作业,数组递增时
def findByElement(arr,size,key):
for i in range(size):
if arr[i]>=key:
return arr[i]
return -1
增加一个元素(重要)
在有序数列中将给定元素插入到对应位置shan
def addByElenmentSequence(arr,size,element):
if size>=len(arr):
return -1
index=size
for i in range(size):
if element<arr[i]:
index=i
break
for j in range(size,index,-1):
arr[i]=arr[j-1]
arr[index]=element
return index
删除一个元素
先从最左侧开始查是否存在元素,如果元素存在,从该位置开始执行删除操作。
def removeByElement(arr,size,key):
index=-1
for i in range(size):
if arr[i]==key:
index=i
break
if index!=-1:
for i in range(index,size-1):
arr[i]=arr[i+1]
size=size-1
return size
算法热身
单调数组问题
想法是两个分开看,并做了一个标记位
def isMonotonic(self, nums):
l= len(nums)
count = 0
for i in range(l - 1):
if nums[i] > nums[i + 1]:
count = 1
break
if count == 1:
for i in range(l - 1):
if nums[i] < nums[i + 1]:
count = 2
break
if count == 2:
return False
else:
return True
改进——看了老师的,做了标志位改进,这样只用一个循环就可以测两个了
def isMonotonic(self, nums):
l= len(nums)
inc=True
dec=True
for i in range(l - 1):
if nums[i]>nums[i+1]:
dec=False
if nums[i]<nums[i+1]:
inc=False
return inc or dec
拓展——leetcode35
记得补充二分
def searchInsert(self, nums, target):
n = len(nums)
index = n
for i in range(n):
if nums[i] == target:
return i
if nums[i] > target:
index = i
break
return index
数组合并
这道题对我还是很困难
首先第一种思路,我认为是创建一个新数组,然后把他们对比再放进去,这个比较简单
第二种思路,把nums2数组合并到nums1数组里面去,从前往后
难点:数组后移代码写不出来,回去看了老师的增加元素,使用了从后往前移的方法,你能直接后移吗?
def merge(self, nums1, m, nums2, n):
i = j = 0
tmp = 0
while i < m:
if j < n and nums1[i] > nums2[j]:
#这段循环很重要,背下来,数组从后往前移,因为我写不来数组直接后移
for k in range(m, i, -1):
nums1[k] = nums1[k - 1]
nums1[i] = nums2[j]
m += 1
j += 1
i += 1
while j < n:
nums1[i] = nums2[j]
i += 1
j += 1
第三种思路,先将nums2合并到nums1数组后面,再对nums1数组进行排序,开拓思路
优化——从后向前插入
def merge(self, nums1, m, nums2, n):
i=m+n-1
m-=1
n-=1
while m>=0 and n>=0:
if nums1[m]>nums2[n]:
nums1[i]=nums1[m]
m-=1
else:
nums1[i] = nums2[n]
n -= 1
i-=1
#对老师的方法进行了改进,因为发现nums1数组即使没遍历完也没影响,省略了判断他的这一步
while n!=-1:
nums1[i]=nums2[n]
n-=1
i-=1