leetcode每日一题【7】

news2024/11/28 4:35:02

在这里插入图片描述

第一题:67. 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = "11", b = "1"
输出:"100"
示例 2:

输入:a = "1010", b = "1011"
输出:"10101"

提示:

1 <= a.length, b.length <= 10^4
a 和 b 仅由字符 '0' 或 '1' 组成
字符串如果不是 "0" ,就不含前导零

解题思路

咱就是说,这个题目的笨蛋解法我绝对不会写出来第二次一模一样的,大体思路如下:

  1. 先比较两个二进制数的位数是否相同,如果不同则将短位数的数进行使用缺失位数的0进行补全;
  2. 设置一个布尔值标签表示是否有进位;
  3. 从每一个二进制的低位进行循环的加法,分为三种大的情况:
  • 第一种是两个对应位都是1,但没有进位,直接列表追加0,再将标签改为True
  • 第二种是两个对应位都是1,但有进位,直接列表追加1,再将标签改为True
  • 第三种情况又可以分为三种情况:
    • 第一种情况是有进位且两位数分别为0和1,这个时候列表追加0,且将标签改为True
    • 第二种情况是有进位且两位数都是0,这个时候列表追加1,且将标签改为False
    • 最后一种情况没有进位两者直接相加即可(包含0和1,1和0,0和0)

最后将字符串列表反向拼接输出出来即可

代码

class Solution:
    def addBinary(self, a: str, b: str) -> str:
        c = []

        diff = abs(len(a) - len(b))
        if len(a) > len(b):
            b = '0' * diff + b
        else:
            a = '0' * diff + a
        jinwei = False
        for i in range(len(a) - 1, -1, -1):

            if a[i] == '1' and b[i] == '1' and not jinwei:
                c.append(0)
                jinwei = True
            elif a[i] == '1' and b[i] == '1' and jinwei:
                c.append(1)
                jinwei = True
            else:
                if jinwei and \
                        ((a[i] == '1' and b[i] == '0') or (a[i] == '0' and b[i] == '1')):
                    c.append(0)
                    jinwei = True
                elif jinwei and a[i] == '0' and b[i] == '0':
                    c.append(int(a[i]) + int(b[i]) + 1)
                    jinwei = False
                else:
                    c.append(int(a[i]) + int(b[i]))

        if jinwei:
            c.append(1)
        
        return ''.join(map(str, c[::-1]))

第二题

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4
 
提示:

1 <= nums.length <= 10^4
-10^4 <= nums[i] <= 10^4
nums 为 无重复元素 的 升序 排列数组
-10^4 <= target <= 10^4

解题思路1——普通循环

这个方法在leetcode也不会超时,可能里面的测试样例需要全部循环一遍的不多吧~

大体思路如下,分为两种情况:

  1. 如果被插入元素在被插入列表中存在,直接将存在元素的索引返回;
  2. 如果不存在,则进行逐位迭代,当被插入元素大于当前值且不到最后一个值时,一直向后走;当被插入元素大于当前值且到达最后一个值时,则返回最大索引值+1的结果;反之找到当被插入元素小于当前值时则找到了该插入的索引位置。

解题思路2)——二分查找

采用二分查找(折半查找)的方式进行位置查找的时间复杂度是符合题目 O(log n)的要求的~

大体思路如下:

  1. 定义一个左右指针分别指向第一个元素和末尾元素
  2. 写一个while循环,条件为当左指针索引<=右指针索引时进行循环,每次循环重新计算中间值mid,比较mid与target值的大小来更新左指针或者右指针的大小,mid与target值相等时即为上个解题思路中被插入元素在列表存在的情况;不存在即返回迭代结束后的左指针即为正确答案~

代码

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        if target in nums:
            return nums.index(target)
        else:
            for i, e in enumerate(nums):
                if e < target  and e != nums[-1]:
                    continue
                elif  e < target and e == nums[-1]:
                    return i+1
                else:
                    return i
                    
# 二分查找的思路,返回左指针即为答案             
# class Solution:
#     def searchInsert(self, nums: List[int], target: int) -> int:
#         left, right = 0, len(nums) - 1
#         while left <= right:
#             mid = left + (right - left) // 2
#             if nums[mid] == target:
#                 return mid
#             elif nums[mid] < target:
#                 left = mid + 1
#             else:
#                 right = mid - 1
#         return left

第三题

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。
 

示例 1:

输入:x = 121
输出:true
示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

提示:

-2^31 <= x <= 2^31 - 1

解题思路

  1. 定义首尾指针,分别向中间进行逼近
  2. while的条件为left的索引小于等于right,每一轮循环left和right指向的值是否相等,有一次不同即返回False,结束程序;如果奇数个字符,最后一步left=right的时候即全部字符比较完毕,那么这个数即为回文数~

代码

class Solution:
    def isPalindrome(self, x: int) -> bool:
        str_x = str(x)
        left = 0
        right = len(str_x) - 1

        while left <= right:
            if str_x[left] == str_x[right]:
                left += 1
                right -= 1
            else:
                return False
                sys.exit()
        return True

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

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

相关文章

MyBatis:生命周期、作用域、结果集映射 ResultMap、日志、分页、使用注解开发、Lombok

文章目录 MyBatis&#xff1a;Day 02一、生命周期和作用域二、结果集映射&#xff1a;ResultMap三、日志工厂1. 标准日志&#xff1a;STDOUT_LOGGING2. LOG4J 四、分页五、使用注解开发六、Lombok注意&#xff1a; MyBatis&#xff1a;Day 02 一、生命周期和作用域 理解不同作…

Syncfusion Essential Studio Enterprise 2023.1 Crack

Syncfusion 的所有用户界面、报告、商业智能组件和库都在一个综合套件中。 Syncfusion Essential Studio 企业版包括 1,700 多个组件和框架&#xff0c;适用于 WinForms、WPF、ASP.NET&#xff08;Web Forms、MVC、Core&#xff09;、UWP、WinUI、.NET MAUI、Xamarin、Flutter、…

【Linux从入门到精通】Linux中的权限管理(实例+详解)

本篇文章对Linux下的普通用户和超级用户进行了对比详解。同时有添加和删除普通用户的讲解。也详细的解释了普通文件的权限、拥有者、所属组设置方法&#xff0c;和对目录的权限设置方法。根据需求引出粘滞位&#xff0c;对粘滞位进行详细的解释。解释每个要点是都带有实例&…

分享一个可交互的卡片

五一放假了&#xff0c;寻思着来一个应景的玩意&#xff0c;所以它诞生了。 先上效果图&#xff1a; 再上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><…

给失业的互联网人一个思路:别再苦苦找工作了,要去找门槛低、现金流好、天花板低、资本看不上的创业项目,一年也能几百万!...

失业大潮中的互联网人该何去何从&#xff1f;这大概是许多人在难捱的深夜反复思考的问题。 一位失业很久的网友就在痛苦思索中悟出了适合自己的道路&#xff0c;下面分享给大家&#xff0c;篇幅太长&#xff0c;小编给大家划一下重点。 先说结论&#xff1a;失业的互联网人别再…

MySql数据库的初步安装与数据表结构数据管理

1.数据库的相关了解 1.1 数据库的概念 数据库&#xff08;database&#xff09;是用来组织、存储和管理数据的仓库 数据库管理系统&#xff08;DBMS&#xff09;&#xff1a;是实现对数据有效组织&#xff0c;管理和存取的系统软件。 数据的建立和维护功能&#xff0c;数据定…

【C语言】struct结构体

文章目录 一. 结构体简述二. 结构体的声明和定义1、简单地声明一个结构体和定义结构体变量2、声明结构体的同时也定义结构体变量3、匿名结构体4、配合typedef&#xff0c;声明结构体的同时为结构体取别名5、在声明匿名结构体时&#xff0c;使用typedef给这个匿名结构体取别名 三…

用 AudioGPT 输入自然语言,可以让 ChatGPT 唱歌了?

夕小瑶科技说 原创作者 | 智商掉了一地 借助 ChatGPT 强大的理解与生成能力&#xff0c;结合基础语音模型&#xff0c;集成模型 AudioGPT 诞生了&#xff01; 最近基于 ChatGPT 的二创如雨后春笋一样冒出&#xff0c;上周我们一起看了黑客松优秀作品大赏&#xff0c;这周又有新…

HCIP-7.2VLAN间通信单臂、多臂、三层交换方式学习

VLAN间通信单臂、多臂、三层交换方式学习 1、单臂路由2、多臂路由3、三层交换机的SVI接口实现VLAN间通讯3.1、VLANIF虚拟接口3.2、VLAN间路由3.2.1、单台三层路由VLAN间通信&#xff0c;在一台三层交换机内部VLAN之间直连。3.2.2、两台三层交换机的之间的VLAN通信。3.2.3、将物…

Ae:画笔面板

Ae菜单&#xff1a;窗口/画笔 Brushes 快捷键&#xff1a;Ctrl 9 画笔 Brushes面板提供了画笔预设及画笔设置&#xff08;包括画笔动态&#xff09;等的参数设置。 画笔预设 Brush Presets 画笔预设窗格中提供了自带的画笔预设&#xff0c;主要有尖角 Hard Round、柔角 Soft R…

【云原生】Epinio--Kubernetes 的应用程序开发引擎

Kubernetes 已成为容器编排的事实标准&#xff0c;改变了我们的开发流程。十年前&#xff0c;我们只需要将代码打包成 war/jar 包&#xff0c;然后启动应用即可。然而&#xff0c;现在面向 Kubernetes 的开发&#xff0c;交付的产物有可能是 Helm Chart、Workload Yaml、Docker…

SOFA Weekly|SOFAArk 社区会议预告、Layotto 社区会议回顾、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展 欢迎留言互动&#xff5e; SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&am…

【SPSS】相关分析和偏相关分析详细操作过程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

Vben Admin 自学记录 —— 介绍及使用(持续更新中...)

Vue-Vben-Admin 一个基于 Vue3.0、Vite、Ant-Design-Vue、TypeScript的后台解决方案&#xff0c;为开发中大型项目提供开箱即用的解决方案。 包含功能&#xff1a; 二次封装组件utilshooks动态菜单权限校验按钮级别权限控制… 安装 1.拉取代码 从GitHub上 git clone https:/…

「OceanBase 4.1 体验」|大厂开始接入的国产分布式数据库,不来了解了解?

OceanBase 4.1 体验 前言OCP Express在线升级功能租户级物理备库TP&#xff08;事务处理&#xff09;和AP&#xff08;分析处理&#xff09;优化TP 性能优化AP 性能优化 结尾 前言 上次我们讲了本人自己亲自上手OceanBase 4.1的初体验&#xff0c;国产的分布式数据库也太太太太…

HCIA-RS实验-路由配置-简述RIPv1 和RIPv2

简述 RIPv1和RIPv2是两种不同版本的路由信息协议&#xff08;Routing Information Protocol&#xff09;&#xff0c;用于在网络中传递路由信息。它们的主要区别在于以下几点&#xff1a; 1. 分类&#xff1a;RIPv1是一种类别路由协议&#xff08;classful routing protocol&a…

Python实现图像的手绘效果

用Python实现手绘图像的效果 1.图像的RGB色彩模式 图像一般使用RGB色彩模式&#xff0c;即每个像素点的颜色由红、绿(G)、蓝(B)组成。RGB三个颜色通道的变化和叠加得到各种颜色&#xff0c;其中&#xff1a; R红色&#xff0c;取值范围&#xff0c;0-255G绿色&#xff0c;取值…

将时间序列转换为分类问题

本文将以股票交易作为示例。我们用 AI 模型预测股票第二天是涨还是跌。在此背景下&#xff0c;比较了分类算法 XGBoost、随机森林和逻辑分类器。文章的另外一个重点是数据准备。我们必须如何转换数据以便模型可以处理它。 在本文中&#xff0c;我们将遵循 CRISP-DM 流程模型&a…

机器学习强基计划8-4:流形学习等度量映射Isomap算法(附Python实现)

目录 0 写在前面1 什么是流形&#xff1f;2 什么是流形学习&#xff1f;3 等度量映射原理4 Python实现 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“广”在分析多个机器学习…

【经验分享】Windows/Ubuntu上如何使用api下载kaggle上的数据集

1 下载kaggle的api 1.1 已经安装了Anaconda 打开cmd&#xff08;Windows&#xff09;/打开终端&#xff08;Ubuntu&#xff09; conda activate 你的conda环境名称 这里我的环境叫做Pytorch conda activate Pytorch然后执行pip install kaggle pip install kaggle如果你没…