• 数据结构与算法_sec01_数组


    1、二分查找:

    class Solution:
        def search(self, nums, target):
            right = len(nums) - 1
            left = 0
            while left <= right:
                middle = (left + right)//2
                if nums[middle] < target:
                    left = middle + 1
                elif nums[middle] > target:
                    right = middle - 1
                else:
                    return middle
            return -1
    
    nums = [1,3,5,6,7,9,12]
    target = 3
    a = Solution().search(nums,target)
    print(a)

    2、使用双指针法移除元素

    class Solution:
        def remove(self,nums,val):
            fast = slow = 0
            while fast < len(nums):
                if nums[fast] != val:
                    nums[slow] = nums[fast]
                    slow += 1
                fast += 1
            return slow
    
    nums = [1,3,5,3,7,9,12]
    target = 3
    a = Solution().remove(nums,target)
    print(a)

    3、有序数组的平方:

    class Solution:
        def sortedSquares(self, nums):
            for i in range(len(nums)):
                nums[i] = nums[i]**2
            nums.sort()
            return nums
    nums = [-1,3,-5,7,9,12]
    
    a = Solution().sortedSquares(nums)
    print(a)
    
    #使用双指针法
    class Solution:
        def sortedSquares(self, nums):
            n = len(nums)
            i = 0
            j = n-1
            k = n-1
            ans = [-1]*n
            print(ans)
            while i <= j:
                lm = nums[i]**2
                rm = nums[j]**2
                if lm > rm:
                    ans[k] = lm
                    i += 1
                else:
                    ans[k] = rm
                    j -= 1
                k -= 1
            return ans
    
    nums = [-1,3,-5,7,9,12]
    
    a = Solution().sortedSquares(nums)
    print(a)
    4、长度最小的子数组:
    class Solution:
        def minSubArrayLen(self, nums, target):
            if not nums:
                return 0
            n = len(nums)
            ans = n + 1
            start = 0
            end = 0
            sum = 0
    
            while end < n:
                sum += nums[end]
                while sum >= target:
                    ans = min(ans, end - start + 1)
                    sum -= nums[start]
                    start += 1
                end += 1
            return 0 if ans == n+1 else ans
    
    nums = [2,3,1,2,4,3]
    
    a = Solution().minSubArrayLen(nums,7)
    print(a)

    5、螺旋矩阵

    class Solution:
        def generateMatrix(self, n):
            matrix = [[0]*n for _ in range(n)]
            #空矩阵表示方法
            print(matrix)
            left, right, up, down = 0, n-1, 0, n-1
            number = 1
    
            while left < right and up < down:
    
                for x in range(left, right):
                    matrix[up][x] = number
                    number += 1
    
                for y in range(up, down):
                    matrix[y][right] = number
                    number += 1
    
                for x in range(right, left, -1):
                    matrix[down][x] = number
                    number += 1
    
                for y in range(down, up, -1):
                    matrix[y][left] = number
                    number += 1
    
                left += 1
                right -= 1
                up += 1
                down -= 1
            if n % 2:
                matrix[n//2][n//2] = number
    
            return matrix
    
    a = Solution().generateMatrix(4)
    print(a)
  • 相关阅读:
    Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
    MyBatis 实现一对多有几种方式,怎么操作的?
    利用 ps 怎么显示所有的进程? 怎么利用 ps 查看指定进 程的信息?
    哪个命令专门用来查看后台任务?
    什么是 MyBatis 的接口绑定?有哪些实现方式?
    什么是端到端微服务测试?
    我们如何在测试中消除非决定论?
    什么是持续监测?
    怎么使一个命令在后台运行?
    博客园样式美化(兼容为知笔记)
  • 原文地址:https://www.cnblogs.com/dylee/p/15456132.html
Copyright © 2020-2023  润新知