算法练习|Leetcode189轮转数组 ,Leetcode56合并区间,Leetcode21合并两个有序链表,Leetcode2两数相加,sql总结

目录

  • 一、Leetcode189轮转数组
    • 题目描述
    • 解题思路
    • 方法:切片
    • 总结
  • 二、Leetcode56合并区间
    • 题目描述
    • 解题思路
    • 方法:
    • 总结
  • 三、Leetcode21合并两个有序链表
    • 题目描述
    • 解题思路
    • 方法:
    • 总结
  • 四、Leetcode2两数相加
    • 题目描述
    • 解题思路
    • 方法:
    • 总结
  • sql总结:

一、Leetcode189轮转数组

题目描述

给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 切片思想

方法:切片

  • 因为轮转后切片内顺序不变
  • 将区间调转位置[-k:],[:-k]
  • !!!当k大于数组长度的时候,要取余
class Solution:def rotate(self, nums: List[int], k: int) -> None:"""Do not return anything, modify nums in-place instead."""# 当k大于数组长度时k = k % len(nums)n1 = nums[-k:]n2 = nums[: -k]nums[:] = n1 + n2

总结

  • 切片思想非常好用
  • 轮转的时候注意k的大小
  • 注意语法[ : ] = [ :-k] + [-k: ]


二、Leetcode56合并区间

题目描述

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 合并区间,比较上一个区间的右区间和下一个区间的左区间

方法:

  • 先排序
  • 判断加入区间/更新区间的条件
  • 加入区间:
    merge为空,上一个区间的右区间小于下一个区间的左区间[1,3],[4,5]
  • 更新区间:
    上一个区间的右区间大于下一个区间的左区间
    !!!更新右区间=这两个区间右区间的最大值
class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:# 根据每个区间的左区间进行排序intervals.sort(key = lambda x: x[0])merge = []for i in intervals:if not merge or merge[-1][1] < i[0]:merge.append(i)else:merge[-1][1] = max(merge[-1][1], i[1])return merge

总结

  • 二维数组排序
    s.sort(key = lambda x: x[0])
  • 多列几个例子就知道合并的逻辑了


三、Leetcode21合并两个有序链表

题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

在这里插入图片描述
在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 比合并区间简单,链表合并只用比大小
  • 小的加入,剩的加入

方法:

  • 新建一个空节点dummy,用merge遍历,最终返回dummy.next
  • 当两个链表节点都存在时,哪个小就连上哪个
  • 当只剩一个链表时,将剩下的链表之间连过来
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:dummy = ListNode()merge = dummycur1 = list1cur2 = list2while cur1 and cur2:if cur1.val <= cur2.val:merge.next = cur1cur1 = cur1.nextelse:merge.next = cur2cur2 = cur2.nextmerge = merge.next# 剩余节点直接连过来if cur1:merge.next = cur1else:merge.next = cur2return dummy.next

总结

  • 剩余链表可以通过节点之间连过来
    if cur1:
    merge.next = cur1


四、Leetcode2两数相加

题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

在这里插入图片描述

题目链接:力扣题目链接

解题思路

  • 注意存储进位的值

方法:

  • while循环只要有一个链表没走完就继续走,走完的为0
  • 注意最后如果还有进位,要用merge.next存完!!!
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:cur1 = l1cur2 = l2dummy = ListNode()merge = dummypre = 0while cur1 or cur2:val1 = cur1.val if cur1 else 0val2 = cur2.val if cur2 else 0total = val1 + val2 + pre# 处理进位pre = total // 10merge.next = ListNode(total % 10)merge = merge.next# 移动到下一个节点if cur1:cur1 = cur1.nextif cur2:cur2 = cur2.nextif pre:merge.next = ListNode(pre)return dummy.next

总结

  • 新建链表都是:
    dummy = ListNode()
    merge = dummy
    用merge.next继续走,最终返回dummy.next

  • 进位值等于pre // 10

  • 注意最终剩下的进位也要用merge.next存!!!



sql总结:

  • sql中 值的比较用=
    where id % 2 = 1

  • 日期范围用between…and…
    activity_date between “2019-06-28” and “2019-07-27”



心得:就算是春招也要坚持刷算法~!!缓解焦虑就刷力扣!!虽然刷的慢,但希望刷过的算法都会用!!!

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

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

相关文章

dfs+剪枝,LeetCode 39. 组合总和

一、题目 1、题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 …

C++|stack-queue-priority_queue(适配器+模拟实现+仿函数)

目录 一、容器适配器 1.1容器适配器概念的介绍 1.2stack和queue的底层结构 1.3deque容器的介绍 1.3.1deque的缺陷及为何选择他作为stack和queue的底层默认实现 二、stack的介绍和使用 2.1stack的介绍 2.2stack的使用 2.3stack的模拟实现 三、queue的介绍和使用 …

NotePad++联动ABAQUS

Abaqus 中脚本运行 1. 命令区kernel Command Line Interface &#xff08;KCLI&#xff09; execfile(C:\\temp\second develop\chapter2\pyTest1.py)2. CAE-Run Script File->Run Script 3. Abaqus command Abaqus cae noGUIscript.py(前后处理都可)Abaqus Python scr…

排序算法集合

912. 排序数组 趁着这道题总结下排序方法 1.快速排序 算法描述 1.从数列中挑出一个元素&#xff0c;称为"基准"&#xff08;pivot&#xff09;&#xff0c; 2.重新排序数列&#xff0c;所有比基准值小的元素摆放在基准前面&#xff0c;所有比基准值大的元素摆在基…

Redis的内存淘汰策略(简单版)

以下是常见的内存淘汰策略&#xff1a; 1.LRU&#xff08;最近最少使用&#xff09;&#xff1a; 这是redis的默认策略&#xff0c;就是最近最少使用的键被淘汰 2.LFU&#xff08;最不常使用&#xff09;就是最近最不常使用的键被淘汰 3.Random&#xff08;随机淘汰&#xff09…

【网站项目】高校毕业论文管理系统小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

ES主要功能特性和使用场景

ES主要功能特性和使用场景 ES 通常指的是 Elasticsearch&#xff0c;这是一个高度可扩展的开源全文搜索引擎和数据分析平台。Elasticsearch 以其强大的实时搜索、分析和数据可视化能力而闻名&#xff0c;广泛应用于日志分析、应用程序监控、全文检索、商业智能、点击流分析等多…

人工智能论文GPT-3(2):2020.5 Language Models are Few-Shot Learners;微调;少样本Few-Shot (FS)

2 方法Approach 我们的基本预训练方法&#xff0c;包括模型、数据和训练&#xff0c;与GPT-2中描述的过程相似&#xff0c;只是模型规模、数据集规模和多样性&#xff0c;以及训练时长有所扩大&#xff0c;相对简单直接。 我们使用的上下文学习也与GPT-2相似&#xff0c;但在…

SpringCloud系列(8)--将服务提供者Provider注册进Eureka Server

前言&#xff1a;上一章节我们介绍了Eureka服务端的安装与配置&#xff0c;本章节则介绍关于微服务如何入职Eureka Server Eureka架构原理图 1、修改provider-payment8001子模块的pom.xml文件&#xff0c;引入Eureka Clinet的依赖&#xff0c;然后reolad一下&#xff0c;下载依…

Parade Series - CoreAudio Loopback

Scenario 鉴于业务场景需要&#xff0c; 经过技术路径探索&#xff0c; 发现 comtypes 兼容性过于混乱&#xff0c;故而考虑整合一个 CoreAudio 的轮子dll来解决实际问题&#xff01;std::StringStream ⇒ std::ios::binary ⇒ std::ofstream Loopback.dll #ifndef _DLL_C…

数学建模--非线性规划模型+MATLAB代码保姆式解析

目录 1.简单介绍 2.求解方法 3.适用赛题 4.典型例题及相关分析 &#xff08;1&#xff09;问题引入 &#xff08;2&#xff09;决策变量&约束条件 &#xff08;3&#xff09;确定目标函数 &#xff08;4&#xff09;建立数学模型 5.MATLAB代码祝逐字句讲解 1.简单…

批量添加集合元素

方法一: Collections.addAll() 方法内部会迭代传递给它的元素列表&#xff0c;并将每个元素添加到目标集合中。 List<Integer> list new ArrayList<>();Collections.addAll(list,1,2,3,4,5); 方式二: ArrayList 类有一个构造函数&#xff0c;它接受一个 Colle…

Redis系列之Cluster集群搭建

在上一篇博客&#xff0c;我们学习Redis哨兵Sentinel集群的搭建&#xff0c;redis的哨兵模式提供了比如监控、自动故障转移等高可用方案&#xff0c;但是这种方案&#xff0c;容量相对固定&#xff0c;要进行持续扩容或者数据分片就不适合&#xff0c;所以有另外一种更复杂的集…

CentOS常见命令

以下是一些常见的CentOS命令&#xff1a; 管理文件和目录&#xff1a; ls&#xff1a;列出目录中的文件和子目录。cd&#xff1a;切换目录。mkdir&#xff1a;创建一个新的目录。rm&#xff1a;删除文件或目录。cp&#xff1a;复制文件或目录。mv&#xff1a;移动或重命名文件…

探索Java设计模式:桥接模式

探索Java设计模式&#xff1a;深入理解与实践桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与其实现部分分离&#xff0c;使它们可以独立变化。在Java编程中&#xff0c;桥接模式常用于实现多维度变化、降低类的层次…

图像处理的魔法师:Pillow 库探秘

文章目录 图像处理的魔法师&#xff1a;Pillow 库探秘第一部分&#xff1a;背景介绍第二部分&#xff1a;库是什么&#xff1f;第三部分&#xff1a;如何安装这个库&#xff1f;第四部分&#xff1a;库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解…

YOLOv9改进策略 | 添加注意力篇 | 利用ILSVRC冠军得主SENetV1改善网络模型特征提取能力

一、本文介绍 本文给大家带来的改进机制是SENet&#xff08;Squeeze-and-Excitation Networks&#xff09;其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型&#xff0c;而是一个可以和现有的任何一个模型相结合的模块(可以看作是一…

最新Java面试题3【2024中级】

互联网大厂面试题 1&#xff1a;阿里巴巴Java面试题 2&#xff1a;阿里云Java面试题-实习生岗 3&#xff1a;腾讯Java面试题-高级 4&#xff1a;字节跳动Java面试题 5&#xff1a;字节跳动Java面试题-大数据方向 6&#xff1a;百度Java面试题 7&#xff1a;蚂蚁金服Java…

消息转化器(解决由于后端给前端响应的格式中不能处理Long类型,因为js只会处理前16位,这样会导致后面的精度丢失)

问题描述&#xff1a;由于后端给前端响应的格式中不能处理Long类型&#xff0c;因为js只会处理前16位&#xff0c;这样会导致后面的精度丢失。 解决方法&#xff0c;将后端响应给前端的数据转化位JSON格式&#xff0c;将long类型的序列化一下 下面为具体方法(JAVA对象转化为J…

PyCharm,终端conda环境无法切换的问题(二个解决方案)

问题 PyCharm终端&#xff0c;环境切换无效&#xff0c;默认始终为base 解决一 Settings->Tools->Terminal->ShellPath&#xff0c;将powershell修改为cmd.exe 解决二 conda config --show在输出中找到 auto_activate_base 的行&#xff0c;发现被设置为 true&#x…