leetcode day3

一、python相关
1、注意使用len(nums)的时候nums 的长度变化
二、算法相关
题目1:remove element
时间复杂度比较好的一种做法:

  1. 设置两个变量 i --数组的key, n–数组的长度
  2. 比较当前数组数值与value的大小关系,如果相等,则将当前值与最后那个数值相交换,切n–,减小数组大小
  3. 如果不相等则继续下去
    这种方法用到了题目中的不介意数组中元素的顺序这个条件,而且需要交换的数组也会比较少。

题目2: search insert position
1、 顺序查找可以做出来

  1. 从第零项开始遍历,如果nums[0]>target, 返回0
  2. 开始遍历,如果target<nums[i], 返回i
  3. 遍历到最后一项,返回i+1

2、二分法
逼近
def searchInsert(self, nums, target):
“”"
:type nums: List[int]
:type target: int
:rtype: int
“”"
high = len(nums)-1
low = 0
mid = 0
while(low <= high):
mid = int((low + high)/2)
if nums[mid] == target:
return mid
elif nums[mid] < target:
low = mid + 1
else:
high = mid -1
return low

  1. 二分法,设立三个点,中点最高点以及最低点,mid等于(high+low)/2
  2. 如果当前nums[mid] == target 返回mid
  3. 如果当前nums[mid]<target 则最低点(low)向右移动至 mid+1
  4. 如果当前target<nums[mid] 则最高点( high ) 向左移动至 mid-1
  5. 当low <= high 时进行循环
  6. 否则退出循环并返回 low(这种情况发生在:当逼近到low==high时,如果target大于当前值,则返回的是mid+1,如果target小于当前值,则返回的是mid本身)

猜你喜欢

转载自blog.csdn.net/qq_39029148/article/details/88082589