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)
  • 相关阅读:
    晶振故障原因
    国外被疯赞的一篇神文:你该增加人生技能了(转)
    Python学习笔记-Day27-正则表达式
    Python学习笔记-Day25-模块(hashlib、configpaser,logging)
    Python学习笔记-Day24-collections模块
    Python学习笔记-Day23-模块(时间、随机数、sys、os)
    Python学习笔记-Day22-内置方法及序列化模块
    Python学习笔记-Day21-反射、__str__、__repr__
    @classmethod 与 @staticmethod
    @property(setter、deleter)将类中的方法伪装成属性
  • 原文地址:https://www.cnblogs.com/dylee/p/15456132.html
Copyright © 2011-2022 走看看