zoukankan      html  css  js  c++  java
  • 数据结构与算法_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)
  • 相关阅读:
    压缩与解压
    Ubuntu下搭建yocto
    Ubuntu 1804 进入紧急模式
    How To Configure NFS Client on CentOS 8 / RHEL 8
    Install and Configure NFS Server on RHEL 8 / CentOS 8
    结构体大小的计算
    SQL语句对数据库调优常用
    用SQL语句操作数据库高级
    windows命令行操作mysql
    创建方便的csv格式文件
  • 原文地址:https://www.cnblogs.com/dylee/p/15456132.html
Copyright © 2011-2022 走看看