数据结构最长见的结构就是数组,也是初学者最常使用的数组结构。
1、在内存空间上是连续地,查找时间复杂度为O(1),插入/删除的时间复杂度为O(N);
2、代码理解起来非常容易,面试通常夹杂着其他的算法知识;
1)二分法
作为最常用地搜索算法,通常前提条件为有序数组并且无重复项,当符合上述条件,建议尝试二分法解决问题;
根号n问题;
# DATE:2022/1/23 16:55
# Author:doujiangyoutiao
# script:
import math
def Sqrt(target)->float:
#确定精度
tmp = math.pow(10,-2)
if target<=0 :
return -1.0
left,right = 0,target
while left<=right:
mid = left + (right-left) // 2
if target - mid ** 2<tmp:
return round(mid,2)
elif target - mid ** 2>tmp:
left = mid + 0.01
elif target - mid ** 2<0:
right = mid - 0.01
if __name__ == '__main__':
print(Sqrt(2))
'''1.42'''
使用二分法求得根号n问题;
ii)长度最小字数组:
输入:s = 7, nums = [2,3,1,2,4,3]
滑动窗口
def slideWindows(lists,target)->int:
nums= len(lists)
low,high = 0,0
windows = lists[0]
res = float("inf")
while high<=nums:
if windows<target:
high += 1
if high<nums:
windows += lists[high]
else:
res = min(high - low + 1,res)
windows -= lists[low]
low += 1
return res
if __name__ == '__main__':
s = 7
ll = [2,3,1,2,4,3]
print(slideWindows(ll,s))
iii)移除元素
def removeElement(nums: List[int], val: int) -> int:
"""双指针法
时间复杂度:O(n)
空间复杂度:O(1)
"""
fast = slow = 0
while fast < len(nums):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
# 当 fast指针遇到要删除的元素时停止赋值
# slow 指针停止移动, fast 指针继续前进
fast += 1
return slow
if __name__ == '__main__':
s = 3
ll = [2,3,1,2,4,3]
print(removeElement(ll,s))