【力扣每日一题】每日一题Python代码详解【持续更新】_假如HH的博客-程序员秘密_力扣每题自带的代码是什么

技术标签: 算法  python  力扣每日一题  

34.在排序数组中查找元素的第—个和最后一个位置

在这里插入图片描述
不考虑时间空间的情况下,用python的index函数与reserve函数可以很简单的写出这一题:

class Solution(object):
    def searchRange(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        self = []
        if target not in nums:
            self = [-1, -1]
            return self
        else:
            self.append(nums.index(target))
            nums.reverse() # 翻转nums
            self.append(len(nums) - 1 - nums.index(target))    
            return self

861.翻转后矩阵的得分

在这里插入图片描述
代码详解如下:

class Solution(object):
    def matrixScore(self, A):
        """
        :type A: List[List[int]]
        :rtype: int
        """
        
        m = len(A) #行数
        n = len(A[0]) #列数
        # 第一步,先将二维列表第一列数值不是1的行进行行变化,将第一列全部变成1
        for i in range(m):
            if A[i][0] != 1:
                for j in range(n):
                    if A[i][j] == 1:
                        A[i][j] = 0
                    else:
                        A[i][j] = 1     
        # 第二步,依次遍历每一列,如果某一列的1的数量少于0,则将这一列翻转                  
        for i in range(1, n):
            temp = 0
            for j in range(m):
                if A[j][i] == 1:
                    temp += 1
            if temp < (m//2 + 1): # 这里可以改成temp < m/2,但是力扣m/2不支持浮点数,所以用这个形式
                for j in range(m):
                    if A[j][i] == 1:
                        A[j][i] = 0
                    else:
                        A[j][i] = 1
        # 第三步,依次遍历每一行,按照二进制的方式取值,把每一行相加
        num = 0 #最终返回的值
        temp = 0 #暂存每一行的二进制对应的值
        for i in range(m):
            temp = 1
            for j in range(n):
                if A[i][j] == 1:
                    temp = 2 ** (n-j-1)
                    num += temp
        return num

62.不同路径

在这里插入图片描述
动态规划
在这里插入图片描述
从图片可以看出
递推公式是:dp[i][j] = dp[i-1][j] + dp[i][j-1]
而第一行的任何位置都只有一条路径,在第一列的任何位置也都只有一条路径,所以边界条件是第一行和第一列都是1。

m = 3 # 行
n = 7 # 列
dp = [[0 for i in range(n)] for i in range(m)]
# 这里注意二维列表的创建方法,n表示列,m表示行,不能搞反,否则后面会越界
for i in range(m):
    dp[i][0] = 1
for i in range(n):
    dp[0][i] = 1
# 上面俩个for循环用来确定边界条件

for i in range(1, m):
    for j in range(1, n):
        dp[i][j] = dp[i-1][j] + dp[i][j-1] #递推公式
print(dp[m-1][n-1]) # 返回最后一个位置的值,即路径条数

649.参议院:

在这里插入图片描述
思路参考:https://leetcode-cn.com/problems/dota2-senate/solution/649-dota2-can-yi-yuan-tan-xin-suan-fa-ji-siha/

class Solution(object):
    def predictPartyVictory(self, senate):
        """
        :type senate: str
        :rtype: str
        """
        flag = 0 # flag > 0 则R多于D,反之R少于D
        R = True
        D = True
        while(R & D):
            R = False
            D = False
            for i in senate:
                if i == 'R':
                    if flag < 0: i = 0
                    else: R = True
                    flag += 1
                if i == 'D':
                    if flag > 0: i = 0
                    else: D = True
                    flag -= 1
        
        if R:
            return "Radiant"
        else:
            return "Dire"

860.柠檬水找零

在这里插入图片描述

class Solution(object):
    def lemonadeChange(self, bills):
        """
        :type bills: List[int]
        :rtype: bool
        """
        list1 = 0
        list2 = 0
        list3 = 0
        for i in bills:
            if i == 5:
                list1 += 1
            if (list1 * 5 + list2 * 10 + list3 * 20) < i - 5:
                return False
            else:
                if i == 10:
                    if list1 != 0:
                        list1 -= 1
                        list2 += 1          
                    else:
                        return False
                elif i == 20:
                    if (list2 != 0) & (list1 != 0):
                        list1 -= 1
                        list2 -= 1
                        list3 += 1
                    elif (list2 == 0) & (list1 >= 3):
                        list1 -= 3
                        list3 += 1
                    else:
                        return False

        return True

49.字母异位词分组

在这里插入图片描述
用字典键值对的对应来完成此题
先定义一个值类型为列表的字典
然后将每一个字符串排序之后与字典的键对应
对应相同键的字符串放在同一个值内

class Solution(object):
    def groupAnagrams(self, strs):
        """
        :type strs: List[str]
        :rtype: List[List[str]]
        """
        dict = defaultdict(list) # defaultdict()可以用来初始化一个值为列表的字典
        for st in strs:
            key = ''.join(sorted(st))
            dict[key].append(st)

        return list(dict.values()) # 可以将字典的所有值以列表的形式输出出来

738:单调递增的数字

在这里插入图片描述

class Solution(object):
    def monotoneIncreasingDigits(self, N):
        """
        :type N: int
        :rtype: int
        """
        newN = str(N)
        flag = len(newN)
        # flag 用来记录从哪个位置开始把从这个位置到结尾都变成9
        for i in range(len(newN)-1, 0, -1):
            if newN[i-1] > newN[i]:
                flag = i
                temp = int(newN[i-1]) - 1
                newN = newN[:i-1] + str(temp) + newN[i:]
                # 字符串修改数值必须用切割序列的方法,不能直接修改
            for j in range(flag, len(newN), 1):
                newN = newN[:j] + '9' + newN[j+1:]
        return(int(newN))  
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/QAQjiaru233/article/details/110825834

智能推荐

最小二乘法matlab实现_孤影残生的博客-程序员资料_最小二乘法定位matlab

最小二乘法1 polyfit多阶拟合2 lsqnonlin非线性拟合最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具。...

用QByteArray、QDataStream ,QFile 写文件时,多写入字节的问题_康闯的博客-程序员资料_qbytearray写入文件

用QByteArray、QDataStream ,QFile 写文件时,多写入字节的问题本机系统配置:ThinkPadE410、Windows7我在用QByteArray数据、QFile和QDataStream写文件的时候,发现每次保存的文件都会在一开始的时候多出4个字节,然后我做了一些测试,对比了一下几个写文件的方法,具体如下://写文件的方法 : QByteArray ba; ba.resize(vShortData.size()*2); memcpy((char*)ba

C++多线程快速入门(三):生产者消费者模型与条件变量使用_拾牙慧者的博客-程序员资料

互斥锁完成#include &lt;iostream&gt;#include &lt;deque&gt;#include &lt;thread&gt;#include &lt;mutex&gt;std::deque&lt;int&gt; q;std::mutex mtx;static void produce(int val) { while(val--) { std::unique_lock&lt;std::mutex&gt; guard(mtx);

如何区分机器人大类的GH和GG_zhangrelay的博客-程序员资料

自动驾驶属于机器人大类方向,“开源”自动驾驶方案Apex.AI使用了ROS1和ROS2。现在(2022年)不论是公众号还是博客,都大量涉入GG,有个人推广也有企业宣传。但是GH有时候太干了,没法消化吸收,所以各种辅助(GG)也会出来ROS机器人只推荐:docs.ros.org>>>docs.ros.org<<<

SDF(Signed-distance-field: 有向距离场)(12): Shadow And AO(WebGL实现)增强立体感_含影的博客-程序员资料

Demo1:http://www.artvily.com/sdf?sample=codeDemo&amp;clip=shadowAndAO3Demo2:http://www.artvily.com/sdf?sample=codeDemo&amp;clip=shadowAndAO2AO(Ambient Occlusion) 中文翻译为环境遮蔽, 这个功能可以在渲染中有效增强立体感。可...

随便推点

二维码(生成以及扫一扫)_哈哈…咯的博客-程序员资料

**导入封装好的library,然后导入以后会报错,这时候像根的build.gradle导入classpath ‘com.github.dcendents:android-maven-gradle-plugin:2.0’然后就解决报错问题了**上代码了mainactivity.xml,就是几个控件&lt;LinearLayout xmlns:android="http://...

Mybatis配置-驼峰命名_`阿杰`的博客-程序员资料_mybatis驼峰命名配置

解决数据库字段与实体类属性名不一致的问题如 A_COLUMN —&gt; aColumn &lt;!-- 驼峰命名自动映射,value="true" true为开启 --&gt; &lt;setting name="mapUnderscoreToCamelCase" value="true"/&gt;

TCP的滑动窗口算法_ly695908698的博客-程序员资料_tcp滑动窗口协议与窗口大小的计算

IP层协议属于不可靠的协议,IP层并不关系数据是否发送到了对端,TCP通过确认机制来保证数据传输的可靠性。 它本质上是描述接收方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据,如果发送方收到接收方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接收方发送窗口大小不为0的数据报的到来假设A和B之间新建立了一条TCP连接。设备A需要传送一长串数...

tensorflow1.0安装_淡淡的id的博客-程序员资料

TensorFlow 1.0 发布,更快、更灵活、更方便!(含峰会主题演讲视频)就是看到这篇文章,看完视频就有点想了解,接着去官网和中文网,看了介绍和MNIST机器学习入门,嗯,看完了,接着就是入火海了,各种坑。 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理。Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计

64位ubuntu16.04安装Android Studio_yolanda_dawn的博客-程序员资料

ubuntu64位下安装jdk,sdk,android studio,要想正确运行程序,还要安装32位库a32-libs

MFC CScrollView鼠标拖拽移动滚动条出现回滚问题_u011995435的博客-程序员资料

MFC CScrollView鼠标拖拽移动滚动条出现回滚问题问题分析:逻辑视图较大的时候(10w),使用鼠标拖拽移动滚动条时(单击不会回滚),会在32000左右回滚到0。看到熟悉的32000,应该是在获取滚动条位置时,出现了短字节数据转换到长字节数据时出现的精度丢失问题,通过debug单步调试,发现函数调用层次如下:滚动条位置nPos数据,通过函数一层层的转换和计算后传递到SetScrollP...

推荐文章

热门文章

相关标签