数组的增删改查

数组的增删改查看似简单,但是还要多去操作才能更好的掌握边界值的判断。

1. 增加一个元素

def add_by_element_sequence(arr, size, key):
    index = size
    for i in range(0, size):
        if key < arr[i]:
            index = i
            break

    for j in range(size, index, -1):
        arr[j] = arr[j - 1]
    arr[index] = key
    return index

2. 删除一个元素

注意:这里要判断array里到底有没有要删除的元素

def remove_by_element(arr, size, key):
    index = -1
    for i in range(0, size):
        if arr[i] == key:
            index = i
            break
    if index != -1:
        for i in range(index + 1, size):
            arr[i - 1] = arr[i]
        size = size - 1
    return size

3. 查找元素

python里查找元素很简单

def find_element(arr, size, key):
    index = -1
    for i in range(size):
        if arr[i] == key:
            index = i
    return index

4. 判断单调数组

这里简单的方法是初始化两个值increase 和 decrease, 然后遍历数组两两比较大小,最后返回知否为单调

    def is_monotonic(self, nums):
        inc = True
        dec = True
        n = len(nums) - 1
        for i in range(n):
            if nums[i] > nums[i + 1]:
                inc = False
            if nums[i] < nums[i + 1]:
                dec = False
        return inc or dec

这里还可以再优化一下,使用二分查找可以提高查找效率

    def searchInsert(self, nums, target):
        left, right = 0, len(nums) - 1

        while left <= right:
            # 中点
            mid = (left + right) // 2
            if nums[mid] == target:
                return mid
            elif target > nums[mid]:
                left = mid + 1
            else:
                right = mid - 1
        return left

5. 数组的合并

python里有函数可以很简单的合并两个数组,并且排序,但是一般面试不会让用

    def merge(self, nums1, m, nums2, n):
        nums1[m:] = nums2
        nums1.sort()

如果有两个单调增的数组,把他们合并可以采用后插法,如果从前往后插入,每次都需要改动后面所有的元素值,但是从后往前插入则会避免这种情况。

或者新建一个list,依次插入,最后再同步num1.

    def merge2(self, nums1, m, nums2, n):
        sorted = []
        p1, p2 = 0, 0
        while p1 < m or p2 < n:
            if p1 == m:
                sorted.append(nums2[p2])
                p2 += 1
            elif p2 == n:
                sorted.append(nums1[p1])
                p1 += 1
            elif nums1[p1] < nums2[p2]:
                sorted.append(nums1[p1])
                p1 += 1
            else:
                sorted.append(nums2[p2])
                p2 += 1
        nums1[:] = sorted

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值