LeeCode初级算法的Python实现--数组

LeeCode初级算法的Python实现--数组

# -*- coding: utf-8 -*-
"""
@Created on 2018/6/3 17:06

@author: ZhifengFang
"""

# 排列数组删除重复项
def removeDuplicates(nums):
    if len(nums) <= 1:
        return len(nums)
    i = 1
    while len(nums) != i:
        if nums[i] == nums[i - 1]:
            del nums[i]
            i -= 1
        i += 1
    return len(nums)

# 买卖股票最佳时机2
def maxProfit(prices):
    max = 0
    if len(prices) <= 1:
        return 0
    for i in range(len(prices) - 1):
        if prices[i] < prices[i + 1]:
            max += prices[i + 1] - prices[i]
    return max

# 旋转数组
def rotate(nums, k):
    # nums = nums[-k:] + nums[:k + 1]
    # print(nums)
    if len(nums) > 1:
        k = k % len(nums)
        if k != 0:
            temp = nums[-k:]
            nums[k:] = nums[:len(nums) - k]
            nums[0:k] = temp
    print(nums)

# 判断数组中是否有重复元素
def containsDuplicate(nums):
    # if len(nums)>len(set(nums)):
    #     return True
    # return False
    for num in nums:
        if nums.count(num) > 1:
            return True
    return False

# 获得里面只出现一次的数字
def singleNumber(nums):
    numCounts = {}
    result = []
    for num in nums:
        numCounts[num] = numCounts.get(num, 0) + 1
    for key in numCounts.keys():
        if numCounts.get(key) == 1:
            result.append(key)
            break
    return result[0]

# 两个数组的交集 II
def intersect(nums1, nums2):
    if len(nums2) < len(nums1):
        nums1, nums2 = nums2, nums1
    newNums = []
    i = 0
    while i < len(nums1):
        j = 0
        while j < len(nums2):
            if nums1[i] == nums2[j]:
                newNums.append(nums2[j])
                del nums1[i], nums2[j]
                i -= 1
                j -= 1
                break
            j += 1
        i += 1
    return newNums

# print(intersect([9],[7,8,3,9,0,0,9,1,5]))

# 加1
def plusOne(digits):
    strDigits = ‘‘
    for example in digits:
        strDigits += str(example)
    strDigits = int(strDigits) + 1
    listDigits = [int(str) for str in str(strDigits)]
    return listDigits

# print(plusOne([1, 2, 3]))

# 移动0
def moveZeroes(nums):
    # for i in range(len(nums)):
    i = 0
    zeroesCount = 0
    while i + zeroesCount < len(nums):
        if nums[i] == 0:
            nums[i:] = nums[i + 1:] + [0]
            i -= 1
            zeroesCount += 1
        i += 1
    return nums

# 两数和
def twoSum(nums, target):
    d = {}
    for x in range(len(nums)):
        a = target - nums[x]
        if nums[x] in d:
            return d[nums[x]], x
        else:
            d[a] = x

nums = [3, 2, 4]
target = 6

# print(twoSum(nums, target))

def isXT(strs):
    strSet = set(strs)
    for s in strSet:
        if s != ".":
            if strs.count(s) > 1:
                return False
    return True

# 有效的数独
def isValidSudoku(board):
    for i in range(9):
        boardLie = [example[i] for example in board]
        key1 = int(i / 3) * 3 + 1
        key2 = 1 + (i % 3) * 3
        boardGe = [board[key1 - 1][key2 - 1], board[key1 - 1][key2], board[key1 - 1][key2 + 1],
                   board[key1][key2 - 1], board[key1][key2], board[key1][key2 + 1],
                   board[key1 + 1][key2 - 1], board[key1 + 1][key2], board[key1 + 1][key2 + 1]]
        if isXT(board[i]) == False:
            return False
        if isXT(boardLie) == False:
            return False
        if isXT(boardGe) == False:
            return False
    return True

board = [[".", ".", "4", ".", ".", ".", "6", "3", "."],
         [".", ".", ".", ".", ".", ".", ".", ".", "."],
         ["5", ".", ".", ".", ".", ".", ".", "9", "."],
         [".", ".", ".", "5", "6", ".", ".", ".", "."],
         ["4", ".", "3", ".", ".", ".", ".", ".", "1"],
         [".", ".", ".", "7", ".", ".", ".", ".", "."],
         [".", ".", ".", "5", ".", ".", ".", ".", "."],
         [".", ".", ".", ".", ".", ".", ".", ".", "."],
         [".", ".", ".", ".", ".", ".", ".", ".", "."]]

# print(isValidSudoku(board))
# 旋转图像
def rotate(matrix):
    for i in range(len(matrix)):
        for j in range(i+1,len(matrix)):
            matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
        matrix[i].reverse()
    print(matrix)

ma = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
rotate(ma)

原文地址:https://www.cnblogs.com/NSGUF/p/9145852.html

时间: 2024-10-25 16:46:08

LeeCode初级算法的Python实现--数组的相关文章

机器学习算法与Python实践之(二)支持向量机(SVM)初级

机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

《机器学习实战》之K-均值聚类算法的python实现

<机器学习实战>之K-均值聚类算法的python实现 最近的项目是关于"基于数据挖掘的电路故障分析",项目基本上都是师兄们在做,我只是在研究关于项目中用到的如下几种算法:二分均值聚类.最近邻分类.基于规则的分类器以及支持向量机.基于项目的保密性(其实也没有什么保密的,但是怕以后老板看到我写的这篇博文,所以,你懂的),这里就不介绍"基于数据挖掘的电路故障分析"的思路了. 废话不多说了,开始正题哈. 基本K-均值聚类算法 基本K均值算法的基本思路为:首先选择

机器学习算法与Python实践之(三)支持向量机(SVM)进阶

机器学习算法与Python实践之(三)支持向量机(SVM)进阶 机器学习算法与Python实践之(三)支持向量机(SVM)进阶 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

机器学习算法与Python实践之(四)支持向量机(SVM)实现

机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 [email protected] http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学习算法.恰好遇见这本同样定位的书籍,所以就参考这本书的过程来学习了. 在这一节我们主要是

python图像数组操作与灰度变换

Python图像数组操作与灰度变换 使用python以及numpy通过直接操作图像数组完成一系列基本的图像处理 numpy简介: NumPy是一个非常有名的 Python 科学计算工具包,其中包含了大量有用的工具,比如数组对象(用来表示向量.矩阵.图像等)以及线性代数函数. 数组对象可以实现数组中重要的操作,比如矩阵乘积.转置.解方程系统.向量乘积和归一化.这为图像变形.对变化进行建模.图像分类.图像聚类等提供了基础. 在上一篇python基本图像操作中,当载入图像时,通过调用 array()

Freecodecamp 前端初级算法(个人向)

freecodecamp 初级算法地址戳这里 Reverse a String 翻转字符串 1 function reverseString(str) { 2 str=str.split("").reverse().join(""); 3 return str; 4 } 5 6 reverseString("hello") Factorialize a Number 计算一个整数的阶乘 1 function factorialize(num) {

二分查找算法的Python实现

问题 二分查找 list.index()无法应对大规模数据的查询,需要用其它方法解决,这里谈的就是二分查找 思路说明 在查找方面,python中有list.index()的方法.例如: >>> a=[2,4,1,9,3] #list可以是无序,也可以是有序 >>> a.index(4) #找到后返回该值在list中的位置 1 >>> a.index(5) #如果没有该值,则报错 Traceback (most recent call last): Fi

几种常用排序算法的python实现

1:快速排序 思想: 任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 一趟快速排序的算法是: 1)设置两个变量i.j,排序开始的时候:i=0,j=N-1: 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]: 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i]: 4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大

《机器学习实战》之二分K-均值聚类算法的python实现

<机器学习实战>之二分K-均值聚类算法的python实现 上面博文介绍了K-均值聚类算法及其用python实现,上篇博文中的两张截图,我们可以看到,由于K-均值聚类算法中由于初始质心的选取,会造成聚类的局部最优,并不是全局最优,因此,会造成聚类的效果并不理想,为克服K-均值算法收敛于局部最小值的问题,就有了二分K-均值算法. 二分K-均值聚类算法 二分K均值算法是基本K均值算法的直接扩充,其基本思想是:为了得到K个簇,首先将所有点的集合分裂成两个簇,然后从这些簇中选取一个继续分裂,迭代直到产生