力扣题31~40

题31(中等):

分析:

其实这题题目比较难懂,题目还是挺简单的

我们可以从后面末尾开始,如果前一个大于后面的,说明后面不用动,如果小于,那就找仅仅大于它的数字放前面,其他数字重新排序放后面,前面不用动

python代码:

class Solution:

    def nextPermutation(self, nums: List[int]) -> None:

        res_list = []

        # 获取长度

        nums_len = len(nums)

        if nums_len==0 or nums_len==1:

            return

        # 从后面算要不要换

        for i in range(nums_len - 1):

            a = nums[nums_len - i - 1]  # 去已经确定的头

            b = nums[nums_len - i - 2]  # 取新加的

            if a > b:

                res_list = nums[nums_len - i - 2:]

                res_list = sorted(res_list)

                index = res_list.index(b)

                while 1:

                    index += 1

                    if res_list[index] != b:

                        break

                res_list = nums[:nums_len - i - 2] + res_list[index:index + 1] + res_list[0:index] + res_list[index + 1:]

                break

            else:

                if i==nums_len-2:

                    res_list = sorted(nums)

                continue

        nums.clear()

        nums.extend(res_list)

题32(困难):

分析:

其实就是遍历一遍,我的思路就是每一项为前两项的和+2,且将前两项去了

python代码:

class Solution:

    def longestValidParentheses(self, s: str) -> int:

        tmp_list=[]

        s_stack=[]

        for i in s:

            if i=="(":

                s_stack.append(i)

                tmp_list.append(0)

            else:

                if len(s_stack)!=0 and s_stack[-1]=='(':

                    s_stack.pop()

                    if tmp_list!=[]:

                        a1=tmp_list.pop()

                    else:

                        a1=0

                    if tmp_list!=[]:

                        a2=tmp_list.pop()

                    else:

                        a2=0

                    next=a1+a2+2

                    tmp_list.append(next)

                else:

                    tmp_list.append(0)

        return max(tmp_list) if  tmp_list!= [] else 0

题33(中等):

分析:

这个和折半查找应该差不多吧

python代码:

class Solution:

    def search(self, nums: List[int], target: int) -> int:

        if nums[0]<nums[-1]:

            nums=nums[:]+[nums[0]-abs(target)]

        num_len=len(nums)

        left = 0

        right = num_len - 1

        notice1=target>=nums[0]

        notice2=target<=nums[-1]

        if notice1==0 and notice2==0:

            return -1

        while left<=right:

            mid=(left+right)//2

            if notice1:

                if nums[mid]==target:

                    return mid

                elif nums[mid]<=nums[-1] or nums[mid]>target:

                    right=mid-1

                else:

                    left=mid+1

                continue

            if notice2:

                if nums[mid]==target:

                    return mid

                elif nums[mid]>=nums[0] or nums[mid]<target:

                    left=mid+1

                else:

                    right=mid-1

                continue

        return -1

题34(中等):

分析:

没什么好分析的,这波也是折半查找

python代码:

class Solution:

    def searchRange(self, nums: List[int], target: int) -> List[int]:

        left=0

        right=len(nums)-1

        min_target=-1

        while left<=right:

            mid=(left+right)//2

            if nums[mid]==target:

                if mid-1>=0 and nums[mid-1]==target:

                    right=mid-1

                else:

                    min_target=mid

                    break

            elif nums[mid]<target:

                left=mid+1

            elif nums[mid]>target:

                right=mid-1


 

        max_target = -1

        left = 0

        right = len(nums) - 1

        while left<=right:

            mid=(left+right)//2

            if nums[mid]==target:

                if mid + 1 <= len(nums)-1 and nums[mid + 1] == target:

                    left = mid+1

                else:

                    max_target = mid

                    break

            elif nums[mid]<target:

                left=mid+1

            elif nums[mid]>target:

                right=mid-1

        return [min_target,max_target]

题35(简单):

python代码:

class Solution:

    def searchInsert(self, nums: List[int], target: int) -> int:

        left=0

        right=len(nums)-1

        min_target=-1

        while left<=right:

            mid=(left+right)//2

            if nums[mid]==target:

                min_target=mid

                break

            elif nums[mid]<target:

                left=mid+1

            elif nums[mid]>target:

                right=mid-1

        return min_target if min_target!=-1 else right+1

题36(中等):

分析:

自己定义一个检查列表的函数,每次将一堆传过去检测

python代码:

class Solution:

    def isValidSudoku(self, board: List[List[str]]) -> bool:

        def isValidUnit(unit):

            # 检查一个行、列或宫格是否有效

            seen = set()

            for num in unit:

                if num != '.':

                    if num in seen:

                        return False

                    seen.add(num)

            return True

        for i in range(9):

            if not isValidUnit(board[i]):

                return False

        for j in range(9):

            column = [board[i][j] for i in range(9)]

            if not isValidUnit(column):

                return False

        for i in range(0, 9, 3):

            for j in range(0, 9, 3):

                square = [board[x][y] for x in range(i, i+3) for y in range(j, j+3)]

                if not isValidUnit(square):

                    return False

        return True

题37(困难):

python代码:

class Solution:

    def solveSudoku(self, board: List[List[str]]) -> None:

        def Conflict(board):

            def isValidUnit(unit):

                # 检查一个行、列或宫格是否有效

                seen = set()

                for num in unit:

                    if num != '.':

                        if num in seen:

                            return False

                        seen.add(num)

                return True

            for i in range(9):

                if not isValidUnit(board[i]):

                    return False

            for j in range(9):

                column = [board[i][j] for i in range(9)]

                if not isValidUnit(column):

                    return False

            for i in range(0, 9, 3):

                for j in range(0, 9, 3):

                    square = [board[x][y] for x in range(i, i + 3) for y in range(j, j + 3)]

                    if not isValidUnit(square):

                        return False

            return True



 

        def run(n):

            for i in range(n,81):

                x = i // 9

                y = i % 9

                if board[x][y]!='.':

                    continue

                for j in range(1,10):

                    board[x][y]=str(j)

                    if Conflict(board) and run(i+1):

                        return True

                    board[x][y]='.'

                return False

            return True


 

        run(0)

题38(中等):

分析:

用上一个的值生成下一个,用递归最好,其实迭代也挺简单,用数组来接受每一次生成的数据即可

python代码:

class Solution:

    @staticmethod

    def toString(str1):

        t_list = []

        res = ''

        for i in range(len(str1)):

            if t_list!=[] and t_list[0]!=str1[i]:

                res=res+str(len(t_list))+t_list[0]

                t_list=[]

            t_list.append(str1[i])

        res=res+str(len(t_list))+t_list[0]

        return res

       

    def countAndSay(self, n: int) -> str:

        if n==1:

            return '1'

        else:

            newstr=self.countAndSay(n-1)

            print(newstr)

            return Solution.toString(newstr)

题39(中等):

分析:

以后写代码先写注释再写代码,思路更清晰,分析再代码中

python代码:

class Solution:def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:#这个组合题思路肯定是递归,非线性的嘛#先排好序s_can=sorted(candidates)self.res=[]self.call_back(candidates,target,[],0)return self.respassdef call_back(self,candidates,target,n_list,k):#对m操作,这样回溯更稳, 注意深拷贝和浅拷贝m=n_list.copy()#如果target==0,说明已经找到了一组解,将m加入resif target==0:self.res.append(m)return#如果target<0,说明已经超了,直接返回if target<0:return#如果target>0,说明还有剩余,继续递归,借助k来看现在当前最小的是哪个数字,n_list是已经找到的数字if target>0:for i in range(k,len(candidates)):self.call_back(candidates,target-candidates[len(candidates)-i-1],n_list+[candidates[len(candidates)-i-1]],i)

看起来好像代码背景比块背景好看唉

题40(中等):

分析:

见代码注释区域

python代码:

class Solution:def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:#不重复思路肯定也是递归s_can=sorted(candidates)self.res=[]self.call_back(s_can,target,[])return self.resdef call_back(self,s_can,target,res_list):#如果值等于0,则加入resif target==0:self.res.append(res_list)return#如果值小于0或者数组为空,则退出if target<0 or len(s_can)==0:return#如果值大于0,则递归,注意,我们是从高位开始,所以我们是要找小的,不能找大的for i in range(len(s_can)):#如果该项和上一项相同,则跳过if i>0 and s_can[len(s_can)-i-1]==s_can[len(s_can)-i]:continuek=s_can[len(s_can)-1-i]new_target=target-knew_list=res_list.copy()new_list.append(k)new_scan=s_can[0:len(s_can)-1-i]self.call_back(new_scan,new_target,new_list)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/450134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 18升级:避免常见陷阱,顺利完成升级

随着iOS 18的发布&#xff0c;许多用户都希望尽快体验到新系统带来的新功能和改进。然而&#xff0c;升级过程可能会因为准备工作不足或对步骤的不熟悉而变得复杂。本文旨在为用户提供一个清晰的升级指南&#xff0c;确保升级过程既平滑又安全。 升级前的准备工作 在开始升级之…

Linux操作系统小项目——实现《进程池》

文章目录 前言&#xff1a;代码实现&#xff1a;原理讲解&#xff1a;细节处理&#xff1a; 前言&#xff1a; 在前面的学习中&#xff0c;我们简单的了解了下进程之间的通信方式&#xff0c;目前我们只能知道父子进程的通信是通过匿名管道的方式进行通信的&#xff0c;这是因…

JAVA自动化测试TestNG框架

1.TestNG简介 JAVA自动化测试最重要的基石。官网&#xff1a;https://testng.org 使用注解来管理我们的测试用例。 发现测试用例 执行测试用例 判断测试用例 生成测试报告 2.创建Maven工程 2.1创建一个maven工程 2.2设置maven信息 2.3设置JDK信息 2.4引入testng依赖 <dep…

软考高级系统规划与管理师,都是精华知识点!

知识点&#xff1a;信息的定义和属性 1、 信息的基本概念 l 信息是客观事物状态和运动特征的一种普遍形式&#xff0c;客观世界中大量地存在、产生和传递着以这些方式表示出来的各种各样的信息。 l 维纳&#xff08;控制论创始人&#xff09;&#xff1a;信息就是信息&#…

指针——数据结构解惑

文章目录 一.取指针和解指针二.为什么用指针&#xff1f; 指针存的是地址 一.取指针和解指针 int main() {int a0;int * p ;//声明int类型的**指针**char * m ;//声明char类型的**指针**&a;//a是个变量&#xff0c;&a&#xff0c;把地址取出来p&a;//p指针存的a的地…

双十一性价比高的宠物空气净化器推荐,希喂、美的、352测评分享

不知不觉这一年就要过去了&#xff0c;别问我为什么这么感伤&#xff0c;因为双十一要来了&#xff0c;我要开始”剁手“了&#xff0c;尤其是必须得买宠物空气净化器。 因为我家里养了两只猫&#xff0c;超级爱掉毛&#xff0c;每天为了清理这些猫毛我都要烦死了&#xff0c;…

LangChain4j使用阿里云百炼 进行AI调用

LangChain4j 介绍 LangChain4j 是一个专为Java开发者设计的开源库&#xff0c;旨在简化将大型语言模型&#xff08;LLM&#xff09;集成到Java应用程序中的过程。它于2023年初开发&#xff0c;灵感来源于Python和JavaScript的LLM库&#xff0c;特别是为了填补Java领域在这一方面…

支持阅后即焚的笔记Enclosed

什么是 Enclosed &#xff1f; Enclosed 是一个简约的网络应用程序&#xff0c;旨在发送私人和安全的笔记。所有笔记均经过端到端加密&#xff0c;确保服务器和存储对内容一无所知。用户可以设置密码、定义有效期 (TTL)&#xff0c;并选择在阅读后让笔记自毁。 软件特点&#x…

软考高项一年只考一次,2025 年会更难考吗?

根据近几年的考试情况来看&#xff0c;可以推测25年的高项考试可能会更加困难。值得关注的是2024年的考试情况&#xff0c;当年的高项考试是第二次机考&#xff0c;考试形式已经相对稳定。上午考试的科目知识点分布保持稳定&#xff0c;包括1道综合计算题和2道分析题的案例分析…

决策树和集成学习的概念以及部分推导

一、决策树 1、概述 决策树是一种树形结构&#xff0c;树中每个内部节点表示一个特征上的判断&#xff0c;每个分支代表一个判断结果的输出&#xff0c;每个叶子节点代表一种分类结果 决策树的建立过程&#xff1a; 特征选择&#xff1a;选择有较强分类能力的特征决策树生成…

【工欲善其事】巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号

文章目录 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号1 问题描述2 解决方案3 具体步骤4 效果测试5 小结与复盘 巧用 PowerShell 自动清除复制 PDF 文本时夹杂的换行符号 1 问题描述 不知各位是否也为复制过来的文本中夹杂的回车换行符抓狂过&#xff1f;就是在复…

python 爬虫 入门 一、基础工具

目录 一&#xff0c;网页开发者工具的使用 二、通过python发送请求 &#xff08;一&#xff09;、get &#xff08;二&#xff09;、带参数的get &#xff08;三&#xff09;、post 后续&#xff1a;数据解析 一&#xff0c;网页开发者工具的使用 我们可以用 requests 库…

国际期货收费行情源CTP推送式/期货配资软件开发对接行情源的技术性说明

在现代金融市场中&#xff0c;期货交易因其高风险和高回报特性而备受关注。为了满足期货交易者的需求&#xff0c;开发高效、稳定和安全的期货交易软件变得尤为重要。本文将对国际期货收费行情源CTP推送式及期货配资软件的开发对接行情源的技术细节进行详细说明。 一、CTP&…

2024双十一值得购买的好物有哪些?看完这五款好物让你不后悔!

随着一年一度的双十一购物狂欢节即将拉开帷幕&#xff0c;作为一名热衷于分享购物心得的博主&#xff0c;我今天特别想在这里为大家详细介绍五款我个人非常期待入手的好物。这些产品都是经过我精心挑选和试用的&#xff0c;我相信它们不仅能够满足我的需求&#xff0c;同样也能…

visio导出pdf公式变形问题杂谈

其实不会变形。 我自己的情况是直接用edge PDF阅读器打开pdf看到的是公式有变形&#xff08;常见是字体、形状变了&#xff09;&#xff0c;但换一个pdf阅读器如adobe的就是正常的了 不过大家一般是用edge pdf阅读器直接打开查看&#xff0c;所以通过visio打印的方式导出pdf可…

力扣46~50题

题46&#xff08;中等&#xff09;&#xff1a; 分析&#xff1a; 见注释 python代码&#xff1a; class Solution:def permute(self, nums: List[int]) -> List[List[int]]:#长度小于6&#xff0c;不就是告诉我用递归嘛res[]#递归函数def call_back(p_list,n_list):#判断…

Cesiumlab发布3dtiles白膜流程与前端可视化加载

Cesiumlab发布3dtiles白膜流程与前端可视化加载 1.前置准备 1.1 安装CesiumLab并注册(CesiumLab安装、CesiumLab账号注册以及不同授权类型的说明 CesiumLab系列教程 - 知乎 (zhihu.com))&#xff1b; 1.2 最好安装有Qgis可以进行简单数据处理&#xff08;如果有完整数据可以…

可以在桌面上用的倒计时提醒app下载

在忙碌的工作日常中&#xff0c;我们常常需要记住各种截止日期和重要事件。为了确保这些任务按时完成&#xff0c;一款桌面倒计时提醒应用变得尤为重要。想象一下&#xff0c;当你在电脑桌面上就能清晰地看到剩余时间&#xff0c;这无疑会增加你的工作效率和紧迫感。 敬业签就…

华为eNSP实验:交换机流量控制之流量抑制

一、交换机流量控制之流量抑制 流量抑制是一种网络管理技术&#xff0c;用于防止过量的数据流通过网络设备&#xff0c;从而避免网络拥塞和性能下降。具体如下&#xff1a; 基本原理&#xff1a; 流量抑制通过设置特定的阈值来限制网络中的数据流量。当某个端口或接口的入站流…

Vue是一套构建用户界面的渐进式框架,常用于构建单页面应用

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…