Tema de la matriz: definición inicial, cálculo, puntero de colisión, ventana deslizante

Definición inicial

Inserte la descripción de la imagen aquí
Idea de resolución de problemas: elimínela directamente cuando encuentre 0, agregue un 0 al final, defina dos variables, una para registrar el valor del índice y otra para registrar el número de comparaciones con 0.

class Solution:
    def moveZeroes(self, nums):
        """
        Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        index = 0
        opCount = 0
        while(opCount < n):
            if nums[index] == 0:
                nums.pop(index)
                nums.append(0)
            else:
                index +=1
            opCount += 1
#         return nums

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Defina cuatro variables: operando, valor de índice, registre el número de ocurrencias del número actual (no más de 2), el valor actual que aparece continuamente

class Solution:
    def removeDuplicates(self, nums):
        n = len(nums)
        opCount = 0
        index = 0
        recodeNum = 0
        tempNum = nums[0]
        while(opCount <n):
            # 如果该数等于当前的连续值,且出现次数小于2,那么出现次数值加一,索引值加一
            if nums[index] == tempNum and recodeNum < 2:
                recodeNum += 1
                index += 1
            # 如果该数等于当前的连续值,且出现次数不小于2,根据索引从数组中剔除掉
            elif nums[index] == tempNum:
                nums.pop(index)
            # 如果该数不等于当前的连续值,更新当前的连续值,索引值加一,重新计算出现次数的值(一定先更新值再索引加一)
            else:
                tempNum = nums[index]
                recodeNum = 1
                index += 1
            opCount += 1
        return len(nums)

Inserte la descripción de la imagen aquí

Cálculo

Inserte la descripción de la imagen aquí

class Solution:
    def sortColors(self, nums):
        """
        Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        index = 0
        opCount = 0
        while(opCount < n):
            # 如果当前数是2,那么把2放到末尾
            if nums[index]==2:
                nums.pop(index)
                nums.append(2)
            else:
                # 如果当前数是0,那么,0放到开头
                if nums[index] == 0:
                    nums.pop(index)
                    nums.insert(0,0)
                index += 1
            opCount += 1

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

class Solution:
    def findKthLargest(self, nums, k):
        return sorted(nums)[len(nums)-k]

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Sea grosero. . . . . . .

class Solution:
    def merge(self, nums1, m, nums2, n):
        """
        Do not return anything, modify nums1 in-place instead.
        """
        tempList = sorted(nums1[:m] + nums2[:n])
        nums1.clear()
        for t in tempList:
            nums1.append(t)
#         print(nums1)

Inserte la descripción de la imagen aquí

Puntero de colisión

Inserte la descripción de la imagen aquí
Método 1: búsqueda de índice único

class Solution:
    def twoSum(self, numbers, target):
        length = len(numbers)
        for i in range(length):
            n = numbers[i]
            if n > target:
                return []
            try:
                return [numbers.index(n)+1, i + 1 + numbers[i+1:].index(target - n)+1]
            except:
                continue
        return []

Inserte la descripción de la imagen aquí
Método 2: use el índice para buscar antes y después

class Solution:
    def twoSum(self, numbers, target):
        i = 0
        j = len(numbers) - 1
        while(i<j):
            temp = numbers[i] + numbers[j]
            if temp == target:
                return [i+1,j+1]
            elif temp > target:
                j-=1
            else:
                i+=1
        return []

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

class Solution:
    def isPalindrome(self, s):
        if s=='':
            return True
        allChar = '1234567890zxcvbnmasdfghjklpoiuytrewq'
        s = s.lower()
        newS = ''
        for ch in s:
            if ch in allChar:
                newS += ch
        return newS == newS[::-1]

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

class Solution:
    def reverseVowels(self, s):
        vowels = 'aoeiuAOEIU'
        i = 0
        j = len(s) - 1
        s = list(s)
        temp = ''
        while(i<j):
            if s[i].lower() in vowels and s[j].lower() in vowels:
                temp = s[i]
                s[i] = s[j]
                s[j] = temp
                i += 1
                j -= 1
            if s[i] not in vowels:
                i += 1
            if s[j] not in vowels:
                j -= 1
        result = ''
        for s_ in s:
            result+=s_
        return result

Inserte la descripción de la imagen aquí

Ventana deslizante

Inserte la descripción de la imagen aquí

class Solution:
    def minSubArrayLen(self, s, nums):
        
        n = len(nums)
        if n == 0:
            return 0
        if n == 1:
            if nums[0] > s:
                return 1
            else:
                return 0
        if nums[0] >=s:
            return 1
        if sum(nums) < s:
            return 0
        
        temp = 0
        leftIndex = 0
        rightIndex = 1
        minLen = n
        temp = nums[leftIndex] + nums[rightIndex]
        while(rightIndex <n and leftIndex <n):
            # 比s大,左索引动,减去左值
            if temp >= s :
                if rightIndex - leftIndex + 1 <= minLen:
                    minLen = rightIndex - leftIndex + 1
                temp -= nums[leftIndex]
                leftIndex += 1
            # 比s小,右索引动,加上右值
            else:
                rightIndex += 1
                if rightIndex <n:
                    temp += nums[rightIndex]
        return minLen

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/wjl__ai__/article/details/113148757
Recomendado
Clasificación