力扣1~5题

news2024/11/25 20:56:10

题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]

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

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

相关文章

cnn突破四(生成卷积核与固定核对比)

cnn突破三中生成四个卷积核&#xff0c;训练6万次&#xff0c;91分&#xff0c;再训练6万次&#xff0c;95分&#xff0c;不是很满意&#xff0c;但又找不到问题点&#xff0c;所以就想了个办法&#xff0c;使用三个固定核&#xff0c;加上三层bpnet神经网络&#xff0c;看看效…

从零开始学cv-16:超像素图像分割

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、超像素图像分割简介二&#xff1a;SLIC超像素图像分割三&#xff1a;Seed超像素分割算法四 &#xff1a;LSC超像素分割 前言 在数字图像处理和计算机视觉领…

2、Redis数据安全性分析

文章目录 一、Redis性能压测脚本介绍二、Redis数据持久化机制详解1、整体介绍Redis的数据持久化机制2、RDB详解3、AOF详解4、混合持久化策略 三、Redis主从复制Replica机制详解**1、Replica是什么&#xff1f;有什么用&#xff1f;****2、如何配置Replica&#xff1f;****3、如…

【AI知识点】正态分布(高斯分布)和中心极限定理(CLT)

正态分布&#xff08;Normal Distribution&#xff09;和中心极限定理&#xff08;Central Limit Theorem, CLT&#xff09; 是统计学中非常重要的概念&#xff0c;它们广泛应用于概率论、数据分析、机器学习等领域。以下将详细解释这两个概念及其关系。 1. 正态分布&#xff…

【C++】入门基础介绍(上)C++的发展历史与命名空间

文章目录 1. 前言2. C发展历史2. 1 C版本更新特性一览2. 2 关于C23的一个小故事: 3. C的重要性3. 1 编程语言排行榜3. 2 C在工作领域中的应用 4. C学习建议和书籍推荐4. 1 C学习难度4. 2 学习书籍推荐 5. C的第一个程序6. 命名空间6. 1 namespace的价值6. 2 namespace的定义6. …

《CUDA编程》4.CUDA程序的错误检测

在编写CUDA程序时&#xff0c;有的错误在编译过程中被发现&#xff0c;称为编译错误&#xff0c;有的在运行时出现&#xff0c;称为运行时刻错误&#xff0c;本章讨论如何排查运行时刻错误 1 一个检测CUDA运行时错误的宏函数 1.1 编写错误检查宏函数 在《CUDA编程》3.简单CUD…

从0到1:培训机构排课小程序开发笔记一

业务调研 随着人们生活水平的提高&#xff0c;健康意识和学习需求日益增强&#xff0c;私教、健身和培训机构的市场需求迅速增长。高效的排课系统不仅可以提升机构的管理效率&#xff0c;还能提高学员的满意度。解决传统的排课方式存在的时间冲突、信息不对称、人工操作繁琐等…

51单片机的家用煤气报警系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器CO传感器蓝牙LED、蜂鸣器等模块构成。适用于家用天然气泄露报警器、煤气泄露报警器、无线报警等相似项目。 可实现功能: 1、LCD1602实时显示温度和煤气浓度 2、温度传感器DS18B20采集环境温度 3、CO传…

【Mybatis篇】Mybatis的关联映射详细代码带练 (多对多查询、Mybatis缓存机制)

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】,【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;一.关联映射概述 &#x1f6a…

【BUG】P-tuningv2微调ChatGLM2-6B时所踩的坑

0.前言 P-tuning v2的实验在网上一抓一大把&#xff0c;这里就说一下我在微调过程中遇到的有些bug&#xff0c;踩过的一些坑&#xff0c;在网上找了很久都没有一些好的解决方案&#xff0c;在这里记录一下。 1.下载预训练模型 在官方给出的教程中&#xff0c;并不需要预先将模…

【springboot】简易模块化开发项目整合Swagger2

接上一项目【springboot】简易模块化开发项目整合MyBatis-plus&#xff0c;进行拓展项目 1.新建模块 右键项目→New→Module&#xff0c;新建一个模块 父项目选择fast-demo&#xff0c;命名为fast-demo-config&#xff0c;用于存放所有配置项 添加后&#xff0c;项目结构如图…

X3U·可编程控制器的定位控制

FX3U可编程控制器的定位控制进行说明。 一、概要 FX3U可编程控制器可以向伺服电机、步进电机等输出脉冲信号&#xff0c;从而进行定位控制。 脉冲频率高的时候&#xff0c;电机转得快:脉冲数多的时候&#xff0c;电机转得多。用脉冲频率、脉冲数来设定定位对象…

Linux基本命令及vim应用实训练习

Linux基本命令及vim应用实训练习 1. 2. 3. 4. 5. 使用man cp找出

4 思科模拟器的介绍和使用

4 思科模拟器的介绍和使用 思科的IOS给我们提供了三大模式 设备开机后&#xff0c;进入的模式是【用户模式】 Router表示设备的名称 “>”表示用户模式 在用户模式输入"?" 可列出在用户模式可以使用的命令 第二种模式是特权模式,输入enable进入特权模式&…

RNN经典案例——构建人名分类器

RNN经典案例——人名分类器 一、数据处理1.1 去掉语言中的重音标记1.2 读取数据1.3 构建人名类别与人名对应关系字典1.4 将人名转换为对应的onehot张量 二、构建RNN模型2.1 构建传统RNN模型2.2 构建LSTM模型2.3 构建GRU模型 三、构建训练函数并进行训练3.1 从输出结果中获得指定…

字符和ACSII编码

1.字符和ASCII编码 C语言中char类型&#xff0c;专门用来创建字符变量&#xff0c;字符放在单引号中 char ch a ASCII码表 c官网&#xff0c;最全de c官网链接 数字字符0~9对应ASCII码十进制48~57 字符 大写字母A~Z对应ASCII码十进制65~90 字符 小写字母a~z对应ASCII码…

EtherCAT 转 EtherNet/IP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899协议转换通信网关 EtherCAT 转 EtherNet/IP GW系列型号 MS-GW12 概述 MS-GW12 是 EtherCAT 和 EtherNet/IP 协议转换网关&#xff0c;为用户提供两…

突发!Meta重磅发布Movie Gen入局视频生成赛道!

引言 Meta于2024年10月4日首次推出 Meta Movie Gen&#xff0c;号称是迄今为止最先进的媒体基础模型。Movie Gen 由 Meta 的 AI 研究团队开发&#xff0c;在一系列功能上获取最先进的效果&#xff0c;包括&#xff1a;文生视频、创建个性化视频、精准的视频编辑和音频创作。 …

递归--C语言

1 递归定义 函数自己调用自己的过程&#xff0c;称为递归。 2 递归的必要条件 1.必须要有终止条件。达到条件就停止递归&#xff0c;退出函数。2.每次调用自己都要越来越接近这个终止条件。 因此写函数的时候&#xff0c;也分两部分 第一部分&#xff1a;写终止条件&#x…

点击按钮提示气泡信息(Toast)

演示效果&#xff1a; 目录结构&#xff1a; activity_main.xml(布局文件)代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http:…