力扣刷题记录——205.同构字符串、217. 存在重复元素、283. 移动零

news2024/11/16 13:00:43

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《205.同构字符串、217. 存在重复元素、283. 移动零》。

目录

205.同构字符串

        题目描述

        解题思路

        解题代码 

​217. 存在重复元素

        题目描述

        解题思路

        解题代码

283. 移动零

        题目描述

        解题思路

        解题过程 


205.同构字符串

题目描述

给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

输入:s = "egg", t = "add"
输出:true

示例 2:

输入:s = "foo", t = "bar"
输出:false

解题思路

看到映射关系,首先想到的是字典的对应关系,所以这一题我们能够拿字典来处理。遍历s,建立与t的映射关系,以此来生成映射中的t,同样遍历t,建立与s的映射关系,生成映射中的s,比较生成的与实际的是否相等,如果都相等说明是同构字符串,返回True,否则返回False。整体的思路还是比较简单的。

解题代码 

def isIsomorphic(s: str, t: str):
    if len(s) != len(t):
        return False
    else:
        s_dic = {}
        t_dic = {}
        s_str = ""
        t_str = ""
        for i in range(0,len(s)):
            s_dic[s[i]] = t[i]
            t_dic[t[i]] = s[i]
        for i in s:
            s_str += s_dic[i]
        for j in t:
            t_str += t_dic[j]
        if s_str == t and t_str == s:
            return True
        else:
            return False

217. 存在重复元素

题目描述

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例 1:

输入:nums = [1,2,3,1]
输出:true

示例 2:

输入:nums = [1,2,3,4]
输出:false

示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

解题思路

这题放之前我肯定遍历列表用count来数了,现在第一想法就是用set转成集合,set有一个天然优势,那就是会去除重复元素,这样我们只需要比较转换前和转化后的长度就可以了,大大减少了代码量,一次通过!

解题代码

def containsDuplicate( nums):
    list_set  = list(set(nums))
    if len(list_set) == len(nums):
        return False
    else:
        return True

283. 移动零

题目描述

 

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

解题思路

分为两步走吧,第一步找出0的索引,第二步将0与后面的数交换,及冒泡排序,这里注意要从后面的索引开始交换,这样才不影响前面列表的顺序,所有涉及到列表的倒序操作。

解题过程 

def moveZeroes(nums):
    zero_list = []
    for i in range(0,len(nums)):
        if nums[i] == 0:
            zero_list.append(i)
    zero_list = zero_list[::-1]
    for ind_p in zero_list:
        while ind_p != len(nums)-1:
            nums[ind_p],nums[ind_p+1] = nums[ind_p+1],nums[ind_p]
            ind_p +=1
    return nums

 可惜,有一个算例超出时间了,看来时间复杂度还是太高了,需要优化自己的代码,要低于O(n^2)。上面我用到的是冒泡排序,可以更换其他的排序算法以降低时间复杂度。

def moveZeroes(nums):
    length_1 = len(nums)
    nums_tep = nums[::-1]
    for i in nums_tep:
        if i == 0:
            nums.remove(i)
    length_2 = len(nums)
    count = 0
    while count != length_1-length_2:
        nums.append(0)
        count+=1
    return nums

 虽然通过了,但是好像复制了数组,不符合题目要求!看看其他大神的解答:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for i in range(len(nums)-1,-1,-1):    
            if nums[i]==0:
                nums.append(nums.pop(i))

利用正序会比较麻烦,这里可以使用倒序去处理。pop弹出0,再通过append方法加到末尾,即可完成操作。

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

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

相关文章

(十四)大白话磁盘文件中, 40个bit位的数据头以及真实数据是如何存储的?

文章目录 1、前情回顾2、详解40个bit位数据头1、前情回顾 之前我们已经给大家讲到了在磁盘上存储数据的时候, 每一行数据都会有变长字段长度列表,逆序存放这行数据里的变长字段的长度,然后会有NULL值列表,对于允许为NULL的字段都会有一个bit位标识那个字段是否为NULL,也是…

shell第五天作业——函数与数组

题目 一、编写函数,实现打印绿色OK和红色FAILED 二、编写函数,实现判断是否有位置参数,如无参数,提示错误 三、编写函数实现两个数字做为参数,返回最大值 四、编写函数,实现两个整数为参数,…

状态压缩DP——最短Hamilton路径

状态压缩DP——最短Hamilton路径一、题目描述二、思路分析1、状态转移方程(1)状态表示——状态压缩(2)状态转移2、循环和初始化(1)循环设计(2)初始化三、代码实现一、题目描述 二、思…

(day1)自学java基础

非原创,记录学习过程,为方便自己后期复习 目录 1.Java基础概念 2.运算符 3.判断 4.循环 5.循环高级 6.数组 7.数组的内存图 8.方法 ctrlaltL 自动格式化代码 为什么要配置环境变量? 我们想在任意目录都可以打开指定软件,就…

DDR3 数据传输(四)

目录 引言 AXI从侧接口参数 AXI从侧接口信号 参考说明 引言 前文链接&#x

巧用网络指数

哈喽,好久不见!今天我们来一起聊聊网络指数。网络指数平台是以网民在线使用行为数据为基础,借助关键词表达的重要信息检索渠道,一定程度上可以反映某一话题的关注度,也可以帮助我们抓住所谓的“热点”。这里&#xff0…

源码编译mindspore,利用云服务器与wsl

文章目录tmux的使用利用WSL2设置交换空间通过编译产生的output安装tmux的使用 参考:https://blog.csdn.net/weixin_43922901/article/details/89230499 参考:http://www.ruanyifeng.com/blog/2019/10/tmux.html tmux用于远程编译,开启一个会…

2023第一天,给你们展示一下用Python实现自动答题

前言 python实现自动答题? 别管,我这就给你们展示一下 (效果图看不了 不知道为什么说我违gui)😥 话不多说,咱就直接看代码吧 代码 准备模块 import requests import parsel from selenium import webd…

create-vite 源码解析它来喽

create-vite的源码很简单,只有一个文件,代码总行数400左右,但是实际需要阅读的代码大约只有200行左右,废话不多说,直接开始吧。 代码结构 create-vite的代码结构非常简单,直接将index.ts拉到最底下&#…

项目学习--谷粒商城

1. 微服务搭建 本地安装虚拟机,静态IP划分和docker的使用微服务功能模块介绍以及业务模块划分与抽取 2. 前端搭建 3. 后端业务代码完善 云储存OSS的整合与使用JSR303校验以及自定义分组校验 4. Elasticsearch学习 Elasticsearch的基础使用Elasticsearch字段ma…

volatile 详解

1. 前言 在并发编程的过程中,volatile属性非常重要。首先我们要了解并发编程的三大特性:可见性, 有序性, 原子性而我们今天的了解的volatile 就牵扯到可见性, 有序性。同时我也会从个人了解的角度给大家分析下,如果有什么不对的地方也希望大家…

物联网与射频识别技术,课程实验(一)

目录 (1)communication.py (2)Reader.py (3)Tag.py 实验1—— EPC C1G2标准下的标签状态转换仿真 实验说明: 利用Python或Matlab模拟C1G2标签的状态转换模型; 程序应能显示标签…

深度学习:01 神经网络与激活函数

目前,最广泛使用的定义是Kohonen于1988年的描述: 神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。 目录 对神经网络的概述 神经网络的表示 激活函数 为什么激…

2022年总结:从初二学生到算法作者的蜕变之路

目录 一年的创作历程 我和 CSDN 在编程竞赛的合作 About CBC 技术社区的发展 夜跑奇遇 About 博客之星 新年致谢 元旦祝福 一年的创作历程 2022年,这一年对于我来说是十分重要的一年。在这一年里,我作为一名初二在校学生,在CSDN上发布…

【Linux 环境变量】环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数

1.问题:为什么自己写的程序需要加上./才能执行,但是指令可以直接使用,例:ls -al? 因为:不加"./"执行程序的时候会按环境变量PATH里面的各个路径找到就正常执行,找不到就报错&#xff…

SQL笔试题总结

文章目录前言一、列转行题目:将表Student转化为下面的形式展示先放答案逐步剖析二、row_number() over() 的使用题目:统计订单交易表(orders)每个商品交易金额最高的那一条数据先放答案逐步剖析三、逐行累加题目:还是订…

✿✿✿JavaScript --- jQuery框架二

目 录 1.高级事件 (1)浏览器一打开自动触发我们绑定的事件 (2) Trigger 传递数据 (3)自定义事件 (4)trigger 简写方案 (5)triggerHandler() (6)trigger和triggerHandler的区别 (7)on off one 2.动画 (1)显示 隐藏 动画 (2)队列动画 (3)下滑 上卷 (4)淡入淡出…

Nacos启动出现Error creating bean with name ‘memoryMonitor‘ 、‘externalDumpService‘

目录 🧡问题 🧡解决方法 💟这里是CS大白话专场,让枯燥的学习变得有趣! 💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话! 💟好记性不如烂键盘&#x…

WSL2支持systemctl命令

文章目录背景相关知识systemdinit安装方法一:微软官方支持方法(推荐)方法二:安装daemonize实现参考背景 微软官方推出Windows Terminal第一时间,我就安装了这个终端软件。现在GitHub已经有86.8k星,且发布了…

一名普通Java程序员的2022的总结和2023的展望

前言今天是元旦节,也是2023年的第一天,首先祝各位亲朋好友们元旦快乐,在新的一年全家身体康健,诸事顺遂,阖家幸福,最重要的是身体健康,工作顺利,永无BUG永不加班!&#x…