力扣刷题学习(跟随视频学着刷)

使用入门

视频链接

【手把手带你刷Leetcode力扣|各个击破数据结构和算法|大厂面试必备技能【已完结】-哔哩哔哩】 https://b23.tv/vIcRT61

时空复杂度

时间:

空间:主要有O(1)和O(n)两种,只用计算开辟的内存,若数组当做参数传进来了,不用计算数组的空间

数组

特点:适合读多写少

操作

  1. 创建数组
  2. 添加元素(追加元素在列表末端,时:O(1),否则为O(n))
  3. 访问元素(时:O(1))
  4. 修改元素(时:O(1))
  5. 删除元素
  6. 遍历数组
  7. 查找元素
  8. 数组长度
  9. 数组排序

相关习题

补充

在Python中,self参数是一个约定俗成的参数名,用于表示对象自身。它通常作为方法的第一个参数,用于引用当前正在调用该方法的对象。

class Person:def _init_(self, name):self.name = namedef introduce(self):print("My name is {self.name}.")person = Person("Tom")
person.introduce()
My name is Tom.

485. 最大连续 1 的个数

. - 力扣(LeetCode)

测试部分用例对了,还未找到错因

def findMaxConsecutiveOnes(nums):""":type nums: List[int]:rtype: int"""# 遍历列表,遍历到列表中的元素为1时:当前计数+1;碰到0时:将当前计数与最大计数对比,若当前计数大,则将当前计数覆盖最大计数,然后将当前计数归0,如此往复,最后返回当前计数和最大计数中的最大值(当列表最后一个元素为1时,也需要对比当前计数和最大计数)now_count = 0	# 当前计数final_count = 0 # 最大计数for i in range(len(nums)):if nums[i] == 1 :now_count += 1else:final_count = max(final_count, now_count)now_count = 0return max(final_count, now_count)
nums = [1,0,1,1,0,1]
print(findMaxConsecutiveOnes(nums))
2

时:O(n)

空:O(1)

283. 移动零

. - 力扣(LeetCode)

def moveZeroes(nums):""":type nums: List[int]:rtype: None Do not return anything, modify nums in-place instead."""# 特殊指针法,当前指针遍历列表,若当前指针遍历到非零元素,则将非零元素向前覆盖,然后继续往后遍历;若遍历到0元素,则计数加1。count = 0 # 计数,记录0元素个数,用于计算覆盖元素的位置for i in range(0,len(nums)):if nums[i] != 0:# 元素向前覆盖nums[i - count] = nums[i]else:count += 1# 后面元素覆0值for i in range(0, count):nums[len(nums) - 1 - i] = 0return nums
nums = [0,1,0,3,12]
print(moveZeroes(nums))
[1, 3, 12, 0, 0]

易错点:(这个-1一定别忘了,假如此时count=1,代表只有一个0被覆盖了,此时应当是nums[len(nums) - 1] = 0)

时:O(n)

空:O(1)

27. 移除元素

. - 力扣(LeetCode)

def removeElement(nums, val):""":type nums: List[int]:type val: int:rtype: int"""# 特殊指针法,当前指针遍历列表,若当前指针遍历到非val元素,则将非零元素向前覆盖,然后继续往后遍历;若遍历到val元素,则计数加1。count = 0 # 计数,记录val元素个数,用于计算覆盖元素的位置for i in range(0,len(nums)):if nums[i] != val:# 元素向前覆盖nums[i - count] = nums[i]else:count += 1# 后面元素删除for i in range(0, count):nums.pop()return nums
nums = [3,2,2,3]
print(removeElement(nums, 3))
print(len(nums))
[2, 2]
2

时:O(n)

空:O(1)

链表

相关习题

203.移除链表元素

. - 力扣(LeetCode)

struct ListNode* removeElements(struct ListNode* head, int val) {// 头结点单独处理while(head != NULL && head->val == val){head = head->next;}if (NULL == head){return head;}struct ListNode *pre = head, *temp;while(pre->next != NULL){if(pre->next->val == val){   //该元素需要删除temp = pre->next;pre->next = temp->next;free(temp);}else{pre = pre->next;}}if(pre->val == val){free(pre);}return head;
}

时:O(n)

空:O(1)

206.反转链表

. - 力扣(LeetCode)

struct ListNode* reverseList(struct ListNode* head) {if(head == NULL){return head;}// p用来遍历单链表,r是为了防止断链struct ListNode *p = head->next, *r;head->next = NULL;while( p != NULL){r = p->next;// 头插法将元素插入p->next = head;head = p;p = r;}return head;
}

时:O(n)

空:O(1)

2

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
int power(int x, int n) {    //该函数用于实现计算x次幂,那么之后求n-1、n-2...次幂都可以用了while (n != 1) {return x*power(x, n - 1);}if (n == 1) {return x;}
}
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {/*算法思想:(1)用两个指针p、q分别遍历两个单链表,将p所指结点的数据一一加和到countl1中。(2)遍历第二个单链表,将q所指结点数据加和countl1到count中,(3)q在遍历期间,首先判断是否会进位,然后将count%10,count/10得到的数据覆盖链表l1的数据,为防止l1链表长度不够,还需要票判断链表是否为空(最后返回l1的数据)*/struct ListNode *p = l1, *q = l2;   //p、q分别用来遍历l1、l2int countl1 = 0, count = 0;int i = 0;while(p != NULL){                   //遍历第一个单链表countl1 += (p->val * power(10, i));p = p->next;i++;}i = 0;int insertdata = 0,prepose = 0;     //insertdata是将要插入链表的数据,prepose控制进位p = l1;while(q != NULL){insertdata = countl1%10 + q->val;if(insertdata >= 10){    //需要进位insertdata /= 10;p->val = insertdata + prepose;prepose = 1;}else{                  //不需要进位p->val = insertdata + prepose;prepose = 0;}p = p->next;q = q->next;countl1 /= 10;}return l1;}
#include<iostream>
#include<cmath>
#include<cstddef>
using namespace std;
struct ListNode {int val;ListNode* next;ListNode(int value) : val(value), next(nullptr) {}
};ListNode* createSList(int* nums, int sz) {ListNode* head = nullptr;ListNode* tail = nullptr;for (int i = 0; i < sz; ++i) {ListNode* newNode = new ListNode(nums[i]);if (tail == nullptr) {head = tail = newNode;} else {tail->next = newNode;tail = newNode;}}return head;
}void destroySList(ListNode* head) {while (head != nullptr) {ListNode* temp = head;head = head->next;delete temp;}
}int main() {int arr[] = {1, 2, 3, 4, 5, 6};int sz = sizeof(arr) / sizeof(arr[0]);ListNode* plist = createSList(arr, sz);// 在程序结束前释放链表占用的内存destroySList(plist);return 0;
}
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {/*算法思想:(1)用两个指针p、q分别遍历两个单链表,将p所指结点的数据一一加和到countl1中。(2)遍历第二个单链表,将q所指结点数据加和countl1到count中,(3)q在遍历期间,首先判断是否会进位,然后将count%10,count/10得到的数据覆盖链表l1的数据,为防止l1链表长度不够,还需要票判断链表是否为空(最后返回l1的数据)*/struct ListNode *p = l1, *q = l2;   //p、q分别用来遍历l1、l2int countl1 = 0, count = 0;int i = 0;while(p != NULL){                   //遍历第一个单链表countl1 += (p->val * pow(10, i));p = p->next;i++;}i = 0;int insertdata = 0,prepose = 0;     //insertdata是将要插入链表的数据,prepose控制进位p = l1;while(q != NULL){insertdata = countl1%10 + q->val;if(insertdata >= 10){    //需要进位insertdata /= 10;p->val = insertdata + prepose;prepose = 1;}else{                  //不需要进位p->val = insertdata + prepose;prepose = 0;}p = p->next;q = q->next;countl1 /= 10;}return l1;
}

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

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

相关文章

三种类的免费SSL证书

目前主流的三种域名证书&#xff1a;单域名证书、多域名证书、通配符泛域名证书。 这三种类型的证书根据用户域名的不同情况&#xff0c;应用场景也大不相同。 单域名证书应用场景&#xff1a; 针对于有且只有一个单独域名的单位&#xff0c;使用单域名证书是刚好能够满足需求…

Linux 高级网络设置

1. rp_filter 逆向路由检查 rp_filter &#xff08;Reverse Path Filtering&#xff09;参数定义了网卡对接收到的数据包进行反向路由验证的规则。他有三个值&#xff0c;0、1、2&#xff0c;具体含意如下&#xff1a; 0&#xff1a;关闭反向路由校验1&#xff1a;开启严格的…

使用脚本定时备份MySql数据库文件

如果mysql不在环境变量中&#xff0c;请先将mysql放入环境变量 #将mysql添加进环境变量中 export PATH$PATH:/usr/local/mysql/bin/#重新加载配置文件 source /etc/profile新建一个脚本 touch backup_all_databases.sh 脚本内容&#xff1a; #!/bin/bash # MySQL登录信息 …

DRF学习之三大认证

一、认证 1、自定义认证 在前面说的 APIView 中封装了三大认证&#xff0c;分别为认证、权限、频率。认证即登录认证&#xff0c;权限表示该用户是否有权限访问接口&#xff0c;频率表示用户指定时间内能访问接口的次数。整个请求最开始的也是认证。 &#xff08;1&#xff…

VUE 打包后 动态修改 后台服务器地址

使用的是第三方 continew-admin 项目 在 continew-admin-ui 项目中 添加 config.json 到public 目录下 {"baseURL": "http://localhost:8000" } 在 request.ts 文件中 async function fetchConfig() {const response await fetch(/config.json);con…

【JavaEE网络】TCP/IP协议:细节与应用

目录 TCP/IP协议协议格式传输层重点协议UDP协议UDP协议端格式 UDP的特点TCP协议TCP协议端格式 TCP的特点 TCP/IP协议 协议格式 应用层&#xff08;后端开发必知必会&#xff09;&#xff1a;这一层也有很多现成的协议&#xff08;后面还会重点介绍HTTP协议&#xff0c;这是做…

SysY 语言

SysY 语言是编译系统设计赛 要实现的编程语言。由 C 语言的一个子集扩展 而成。 每个 SysY 程序的源码存储在一个扩展名为 sy 的文件中。该文件中有且仅 有一个名为 main 的主函数定义&#xff0c;还可以包含若干全局变量声明、常量声明和其 他函数定义。 SysY 语言支持 int/…

jenkins自动化举例

使用 Jenkins 可以显著提高工作效率&#xff1a; 1. **自动化构建**&#xff1a; - 假设您是一个开发人员&#xff0c;需要频繁地编译和测试代码。手动执行这些任务可能会非常耗时。使用 Jenkins&#xff0c;您可以设置自动化构建流程&#xff0c;每当您提交新代码时&#…

RabbitMQ:消息队列的卓越之选

在当今高度互联和数据驱动的世界中&#xff0c;消息队列扮演着至关重要的角色。RabbitMQ&#xff0c;作为其中的佼佼者&#xff0c;以其高效、可靠和灵活的特性&#xff0c;赢得了众多开发者和企业的青睐。本文将深入探讨RabbitMQ的基本概念、核心特性、应用场景以及最佳实践&a…

探秘STM32MDK:编译过程与文件类型解析

探秘STM32MDK&#xff1a;编译过程与文件类型解析 在嵌入式系统开发中&#xff0c;STM32系列微控制器是广泛应用的选择之一&#xff0c;而Keil MDK&#xff08;Microcontroller Development Kit&#xff09;则是一款常用的开发工具套件。了解STM32MDK的编译过程和文件类型对于…

命令执行漏洞【2】vulhub远程命令执行漏洞复现

1.vulhub安装启动靶场环境 &#xff08;1&#xff09;s2-061开启靶场 &#xff08;2&#xff09;s2-059开启靶场 2.漏洞复现 &#xff08;1&#xff09;s2-061漏洞复现 github获取漏洞利用工具 开始利用 &#xff08;2&#xff09;s2-059漏洞复现 在linux特有临时目录/tmp下…

多线程并发和进程通信模拟

一、实验目的&#xff1a; 通过编写多线程并发和进程通信的模拟代码&#xff0c;加深对多线程编程和进程通信的理解。学习如何使用Java中的多线程和管道流来实现并发执行和进程间通信。掌握多线程的基本概念和使用方法&#xff0c;以及进程通信的实现方式。 实验设备与实验环境…

C#实现TFTP客户端

1、文件结构 2、TftpConfig.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace TftpTest {public class TftpConfig{}/// <summary>/// 模式/// </summary>public enum Modes{…

Linux论坛搭建

1.安装httpd服务 1.1安装httpd软件 [rootlocalhost yum.repos.d]# dnf install httpd 1.2.修改httpd的配置 [rootlocalhost yum.repos.d]# vim /etc/httpd/conf/httpd.conf 1.3.启动这个httpd服务,并查看它的状态 [rootlocalhost yum.repos.d]# systemctl start httpd [ro…

NLP(8)--利用RNN实现多分类任务

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 循环神经网络RNN&#xff08;recurrent neural network&#xff09;&#xff1a; 主要思想&#xff1a;将整个序列划分成多个时间步&#xff0c;将每一个时间步的信息依次输入模型&#xff0c;同时将模型输出的结果传给下一个…

JavaEE——spring MVC请求处理

目录 主要目的&#xff1a; 1. Spring web 项目搭建 2. 添加依赖 3. 配置插件 4. 配置设置类 5. 编写controller层类 6. 编写测试的http请求 主要目的&#xff1a; 创建一个spring web项目&#xff1b; 创建控制类&#xff1b; 掌握如何配置MVC&#xff1b; 编写htt…

【机器学习-18】特征筛选:提升模型性能的关键步骤

一、引言 在机器学习领域&#xff0c;特征筛选是一个至关重要的预处理步骤。随着数据集的日益庞大和复杂&#xff0c;特征的数量往往也随之激增。然而&#xff0c;并非所有的特征都对模型的性能提升有所贡献&#xff0c;有些特征甚至可能是冗余的、噪声较大的或者与目标变量无关…

在Visual Studio中查看C项目使用的C语言版本

在Visual Studio中查看C项目使用的C语言版本&#xff0c;可以通过以下步骤进行&#xff1a; 打开Visual Studio。 打开你的C项目。 右键点击项目名称&#xff0c;选择“属性”。 在弹出的属性页中&#xff0c;找到“配置属性” -> “C/C” -> “语言”。 在右侧的“…

(十三)PostgreSQL的扩展(extensions)

PostgreSQL的扩展&#xff08;extensions&#xff09; 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777在Post…

Django框架之python后端框架介绍

一、网络框架及MVC、MTV模型 1、网络框架 网络框架&#xff08;Web framework&#xff09;是一种软件框架&#xff0c;用于帮助开发人员构建Web应用程序和Web服务。它提供了一系列预先编写好的代码和工具&#xff0c;以简化开发过程并提高开发效率。网络框架通常包括以下功能…