力扣1~10题

news2024/11/25 20:36:21

题1(简单).

思路:

        因为时间复杂度小于n^2,所以不能双for遍历,怎么优化?

        这里采用一个键值对的形式,存储nums离target的间隔和它的下标,只要n,然后再遍历nums有没有刚好是这个距离的就好了,只要注意两相同的数字这种情况就好了

python3代码

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        need={}
        for i in range(0,len(nums)):
            a=target-nums[i]
            need[a]=i
        for i in range(0,len(nums)):
            if(need.get(nums[i],'')!='' and need.get(nums[i],'')!=i):
                return [i,need[nums[i]]]

题2(中等):

思路:

无非就是设置一个进位标志就好了,但是呢,这个东西的python,我没看懂它的参数是啥东西,所以用c++,

c++代码

ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
        ListNode* head;
        ListNode* tail;
        int flag=0;
        for(int i=0;;i++){
            int val1=(l1==NULL)?0:l1->val;
            int val2=(l2==NULL)?0:l2->val;
            int sum=(val1+val2+flag)%10;
            flag=(val1+val2+flag)/10;
            ListNode* newNode=new ListNode(sum);
            if(i==0){
                head=newNode;
                tail=newNode;
            }
            else{
                tail->next=newNode;
                tail=tail->next;
            }
            if(l1!=NULL) {l1=l1->next;}
            if(l2!=NULL) {l2=l2->next;}
            if(l1==NULL&&l2==NULL&&flag==0){
                break;
            }
        
        }
        return head;
            


    }

题3(中等):

思路:

我们可以用一个字符串来接受子串,如果发现有重复字符就统计长度再切割前面的

python3代码

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        n=[]
        ss=''
        for i in range(len(s)):
            if s[i] not in ss:
                ss+=s[i]
            else:
                n.append(len(ss))
                ss=ss.split(s[i])[-1]+s[i]

        n.append(len(ss))

        return max(n)

题4(困难):

思路:

找两数组中位数,这个看起来简单,顺手反应就是数第(m+n)/2个,这个难在要求时间复杂度为log(m+n),所以不能这样搞,我的思路是:每次切割长度为较小长度的一半,然后比较哪个对中位数没有影响就切哪个

python代码

    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        med=None

        while 1:
            if len(nums1) == 0:
                med2 = nums2[(len(nums2)) // 2] if len(nums2) % 2 == 1 else (nums2[len(nums2) // 2 - 1] + nums2[
                    len(nums2) // 2]) / 2
                med = med2
                break
            if len(nums2) == 0:
                med1 = nums1[(len(nums1)) // 2] if len(nums1) % 2 == 1 else (nums1[len(nums1) // 2 - 1] + nums1[
                    len(nums1) // 2]) / 2
                med = med1
                break

            if (len(nums1) + len(nums2) <= 2):
                med = ((nums1[0] if len(nums1) > 0 else 0) + (nums2[0] if len(nums2) > 0 else 0)) / (len(nums1) + len(nums2))
                break

            cutlen=len(nums1)//2 if len(nums1)<=len(nums2) else len(nums2)//2
            if(cutlen<1):
                cutlen=1
            if nums1[cutlen-1]<nums2[cutlen-1]:
                nums1=nums1[cutlen:]
            else:
                nums2=nums2[cutlen:]
            if len(nums1)!=0 and (len(nums2)==0 or nums1[len(nums1)-cutlen]>nums2[len(nums2)-cutlen]) :
                nums1=nums1[:len(nums1)-cutlen]
            else:
                nums2=nums2[:len(nums2)-cutlen]


        return med

题5(中等):

思路:

第一步,统计所有回文可能的起点

python代码:

def longestPalindrome(self, s: str) -> str:

        if len(s)==0 or len(s)==1:

            return s

        #第一步,统计所有回文可能的起点

        p_start=[]

        #p_start里面含有[左值,右值,长度]

        for i in range(len(s)-1):

            if s[i]==s[i+1]:

                p_start.append({'left':i,'right':i+1,'length':2})

            if i-1>=0 and i+1<len(s) and s[i-1]==s[i+1]:

                p_start.append({'left':i-1,'right':i+1,'length':3})

        for p in p_start:

            while 1:

                if p['left']-1>=0 and p['right']+1<len(s) and s[p['left']-1]==s[p['right']+1]:

                    p['left']-=1

                    p['right']+=1

                    p['length']+=2

                else:

                    break

        res_len=0

        res=0

        for i in range(len(p_start)):

            res_len,res=(p_start[i]['length'],i) if p_start[i]['length']>res_len else (res_len,res)

        return s[p_start[res]['left']:p_start[res]['right']+1] if len(p_start)!=0 else s[0]

 题6(中等):

思路:

这个相较于前面只能是简单,个人认为,会print打印菱形都能搞这个,直接设置一个2阶数组就好了,只要注意位置变化就好了

python代码:

def convert(self, s: str, numRows: int) -> str:

        #创建n堆空字符串

        new_list=['' for i in range(numRows)]

        #遍历字符串

        k=0

        flag=1

        for i in range(len(s)):

            new_list[k]+=s[i]

            k+=flag

            if numRows-1==0:

                k=0

            else:

                if k==0:

                    flag=1

                elif k==numRows-1:

                    flag=-1

        return ''.join(new_list)

题7(中等):

思路:

怎么感觉难度降下来了,这个用python太容易了啊,用c++应该也不难吧,翻转字符串一个栈不就好了吗?

python代码:

class Solution:

    def reverse(self, x: int) -> int:

        x_str=str(x)

        if x_str[0]=='-':

            x_str='-'+x_str[:0:-1]

        else:

            x_str=x_str[::-1]

        i=int(x_str) if int(x_str)>=-2**31 and int(x_str)<= 2**31-1 else 0

        return i

题8(中等):

思路:

这个截断和我想的截断有点不同啊,我以为还要转二进制然后断呢

python代码:

class Solution:

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

        s=s.strip()

        s_num=''

        for i in range(len(s)):

            if i==0 and (s[i]=='+' or s[i]=='-'):

                s_num+=s[i]

                continue

            if ord(s[i])>=ord('0') and ord(s[i])<=ord('9'):

                s_num+=s[i]

                continue

            else:

                break

        if s_num=='+' or s_num=='-':

            s_num=0

        s_num=int(s_num if s_num!='' else 0)

        if s_num<=-2**31:

            s_num=-2**31

        if s_num>=2**31-1:

            s_num=2**31-1

        return s_num

题9(简单):

思路:

这个对于python有点过于简单了吧

python代码:

class Solution:

    def isPalindrome(self, x: int) -> bool:

        return str(x)==str(x)[::-1]

题10(困难):

思路:

我只能说我不是理解正则,毕竟爬虫我都不管啥,直接.*?,导致我理解错了题意思,我当时以为*是可以匹配任意了,然后写一晚上都没成功,看评论才理解意思,其实理解了写起来就清晰了,采用的方法是递归,时间比较消耗,所以要预处理一下,不然超时

python代码:

class Solution:
    def isMatch(self, s: str, p: str) -> bool:
        if p=='':
            return s==''
        if s=='':
            if len(p)!=2 and p[1]!='*':
                return False
            if len(p)==2 and p[1]=='*':
                return True

        i=0
        #预处理,
        while 1:
            if p[i]=='*':
                if i+2<len(p) and p[i+2]=='*':
                    if p[i-1]==p[i+1]:
                        p=p[:i+1]+p[i+3:]
            i+=1
            if i>=len(p):
                break

        s_p=0
        p_p=0
        while 1:
            if s_p>=len(s) and p_p>=len(p):
                return True
            if p_p>=len(p):
                return False


            if p_p+1<=len(p)-1 and p[p_p+1]=='*':
                for i in range(s_p,len(s)):
                    if s[i]!=p[p_p] and p[p_p]!='.':
                        break
                    else:
                        if self.isMatch(s[i:],p[p_p]+p[p_p+2:]):
                            return True
                p_p+=2
            else:
                if s_p>=len(s):
                    return False
                if p[p_p]==s[s_p] or p[p_p]=='.':
                    p_p+=1
                    s_p+=1
                else:
                    return False

写得很气,所以赶工,注释都没有,再看的话又烦,感觉屎山一样,做的最久的一次,写了3个版本的代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SwiftUI 在 iOS 18 中的 ForEach 点击手势逻辑发生改变的解决

概述 原本在 iOS 17 中运行良好的 SwiftUI 代码突然在 iOS 18 无法正常工作了&#xff0c;具体表现为原来视图中的的点击手势无法响应。 这是怎么回事呢&#xff1f; 且看分解&#xff01;Let’s go&#xff01;&#xff01;&#xff01;&#x1f609; 问题现象 从下面的演示…

自动驾驶系列—GPS技术在自动驾驶中的应用与挑战:全面解析

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

海量案例!点击洞察2024年工业数字孪生发展趋势

如果能在虚拟世界中完美复制出现实中的物体或系统&#xff0c;将会带来怎样的变革&#xff1f;数字孪生正是这样一种神奇的存在——它将物理世界中的设备或系统转化为精确的虚拟模型&#xff0c;通过实时数据的采集、分析与应用&#xff0c;创造出一个与“物理实体”完全对应的…

Apache DolphinScheduler-1.3.9源码分析(二)

引言 随着大数据的发展&#xff0c;任务调度系统成为了数据处理和管理中至关重要的部分。Apache DolphinScheduler 是一款优秀的开源分布式工作流调度平台&#xff0c;在大数据场景中得到广泛应用。 在本文中&#xff0c;我们将对 Apache DolphinScheduler 1.3.9 版本的源码进…

python安装第三方库的问题与解决方法

1 速度过慢 大部分第三方库都是在国外网站&#xff0c;如果直接使用pip install 包名&#xff0c;下载速度会很慢&#xff0c;这对一些大型包是很致命的&#xff0c;如果下载中断则需要重头再来。 解决方案&#xff1a;使用国内镜像&#xff08;如清华镜像下载&#xff09;&a…

Vue 脚手架学习

1.使用 Vue 脚手架 1.1 初始化脚手架 1.1.1 具体步骤 第一步&#xff08;仅第一次执行&#xff09;&#xff1a;全局安装vue/cli。 npm install -g vue/cli 第二步&#xff1a;切换到你要创建项目的目录&#xff0c;然后使用命令创建项目 vue create xxxx 第三步&#xff1a;启…

AI绘画Stable Diffusion XL优化终极指南!

前言 如何在自己的显卡上获得SDXL的最佳质量和性能&#xff0c;以及如何选择适当的优化方法和工具&#xff0c;这一让GenAI用户倍感困惑的问题&#xff0c;业内一直没有一份清晰而详尽的评测报告可供参考。直到全栈开发者Flix San出手。 在本文中&#xff0c;Flix介绍了相关SD…

9个热门.Net开源项目汇总!

今天盘点下9月份推荐的9个开源项目&#xff08;点击标题查看详情&#xff09;。 1、Pidgin&#xff1a;一个轻量级、快速且灵活的 C# 解析库 Pidgin是基于C#的开源项目&#xff0c;是一个解析组合器库&#xff0c;提供了一个高级别的声明性工具来构建解析器&#xff0c;使得编…

雅达利“美洲虎“游戏机在iPhone模拟应用程序中重生

"美洲虎"是雅达利在 1993 年推出一年后&#xff0c;索尼的 PlayStation 和世嘉的土星接手之前&#xff0c;在日益拥挤的家用游戏机市场上保持竞争力的最后一次尝试。 虽然从未在商业上取得成功&#xff0c;但它仍然拥有一批忠实的粉丝&#xff0c;他们欣赏美洲虎独特…

SpringBoot框架下的美发店管理系统开发指南

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

未来已来:AIGC时代为办公方式带来智能化转型与革新

文章目录 一、Excel&#xff1a;从数据处理到智能分析二、Word&#xff1a;从文档编辑到智能写作三、PowerPoint&#xff1a;从幻灯片制作到智能演示四、AI智能办公的挑战与未来《AI智能办公实战108招&#xff1a;ChatGPTWordPowerPointWPS》编辑推荐内容简介作者简介内页插图目…

双十一好物必买榜:数码好物推荐!

​双十一该入手一些好物来准备度过下一年&#xff0c;选择几款数码好物和工作都用得到的实用好物陪伴冬天是能够让自己更积极的迎接生活&#xff0c;能够让自己更开心满足的方式。适当的购物也是能够缓解工作压力&#xff0c;心情不好的方法&#xff0c;但依然要选择买回家不会…

Python办公自动化之TXT

在日常办公中&#xff0c;我们常常需要处理大量的 TXT 文件&#xff0c;比如记录日志、存储数据或是阅读文件内容。Python 作为一款高效的编程语言&#xff0c;可以轻松完成这些任务&#xff0c;为我们的办公流程提供极大的便利。那么&#xff0c;如何利用 Python 办公自动化来…

PDFPatcher:一个无所不能的开源PDF处理工具

如果你工作中&#xff0c;经常需要处理PDF文件&#xff0c;那这款工具绝对可以满足你的所有需求&#xff0c;PDFPatcher一款功能强大的开源PDF处理工具。 01 项目简介 这是一款基于.NET Framework 4.0 到 4.8 版本开发的开源工具&#xff0c;主要采用 iText 和 MuPDF 这两个开…

快速了解2024与AI相关的诺贝尔奖大佬重要知识!

北京时间10月8日下午5点45分许&#xff0c;2024年诺贝尔物理学奖揭晓。美国普林斯顿大学科学家约翰霍普菲尔德&#xff08;John J. Hopfield&#xff09;和加拿大多伦多大学科学家杰弗里辛顿&#xff08;Geoffrey E. Hinton&#xff09;获奖&#xff0c;以表彰他们“基于人工神…

嵌入式面试——FreeRTOS篇(四) 信号量

本篇为&#xff1a;FreeRTOS信号量篇 信号量 1、什么是信号量 答&#xff1a;信号量是一种解决同步问题的机制&#xff0c;可以实现对共享资源的有序访问。 2、信号量简介 答&#xff1a; 当计数值大于0&#xff0c;表示有信号量资源。当释放信号量&#xff0c;信号量计数…

探索利用人工智能追踪逃犯的新技术

介绍 论文地址&#xff1a;https://arxiv.org/abs/2404.12626 近年来&#xff0c;"追逃游戏 "引起了人们的广泛关注。"追逃游戏 "模拟了多组追捕者与单个逃犯之间的追捕游戏。这种博弈发生在城市道路网等图上&#xff0c;有效地找到这种博弈的策略具有多种…

10月9-10日,优阅达邀您参与 2024 新加坡科技周,一站式体验亚洲前沿技术!

一场不容错过的亚洲商业技术盛会将于新加坡滨海湾金沙会展中心盛大开幕。 当全球化的浪潮席卷每一个角落&#xff0c;中国科技企业正站在新的起点&#xff0c;迎接出海的挑战与机遇。 一场不容错过的亚洲商业技术盛会 TECH WEEK SINGAPORE&#xff08;点击报名新加坡科技周&am…

HyperWorks基于几何投影的网格变形

在Altair&#xff08;HyperWorks&#xff09;里&#xff0c;使用本节将演示如何通过 line difference 功能&#xff0c;将已有网格以几何图形为目标进行投影&#xff0c;以生成全新的网格模型。 图 7-5 网格变形模型的状态 Step01&#xff1a;读取模型。 (1) 打开文件 Exerci…

C++入门基础知识106—【关于C++continue 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C continue 语句的相关内容&#xff01;…