leetcode刷题记录

1.二分法

class Solution {
public:int search(vector<int> &nums, int target) {int left = 0, right = nums.size() - 1;while(left <= right) {int mid = left + ((right - left) >> 1);if(nums[mid] > target) {right = mid -1;} else if(nums[mid] < target) {left = mid + 1;} else {return mid;}} return -1;}
};

2.搜索插入位置

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;while(left <= right) {int mid = left + ((right - left) >> 1);if(nums[mid] >= target) {right = mid -1;} else if(nums[mid] < target) {left = mid + 1;} } return left;}
};

3.搜索第一和最后一个位置

class Solution {
public:int binarySearch(vector<int>& nums, int target, bool equ){int left = 0, right = nums.size() - 1;while(left <= right) {int mid = left + ((right - left) >> 1);if(nums[mid] > target || (equ && nums[mid] >= target)) {right = mid -1;} else {left = mid + 1;} } return left;}vector<int> searchRange(vector<int>& nums, int target) {int leftIndex = binarySearch(nums, target, true);int rightIndex = binarySearch(nums, target, false) - 1;if(leftIndex <= rightIndex && rightIndex < nums.size() && nums[leftIndex] == target && nums[rightIndex] == target) {return vector<int>{leftIndex, rightIndex};}return vector<int> {-1, -1};}
};

4.移除元素

// 快慢指针 
class Solution {
public:int removeElement(vector<int>& nums, int val) {int slow = 0, fast = 0;for( ; fast < nums.size(); ++fast) {if(nums[fast] != val) {nums[slow++] = nums[fast];}}return slow;}
};// 相向双指针法
class Solution {
public:int removeElement(vector<int>& nums, int val) {int left = 0, right = nums.size() - 1;while(left <= right) {while (left <= right && nums[left] != val) {++left;}while (left <= right && nums[right] == val) {--right;}if(left < right) {nums[left++] = nums[right--];}} return left;}
};

5.有序数组的平方

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int left = 0, right = nums.size() -1;vector<int> result;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    while(left <= right) {long long a = nums[left] * nums[left];long long b = nums[right] * nums[right];if (a < b) {result.push_back(a);left++;} else {result.push_back(b);right--;}}return result;}
};

6.长度最小的子数组

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int result = INT32_MAX;int start = 0;int sublength = 0;int sum = 0;for(int end = 0; end < nums.size(); end++) {sum += nums[end];while(sum >= target) {sublength = end - start + 1;result = sublength < result ? sublength :  result;sum -= nums[start++];}}return result == INT32_MAX ? 0 : result;}
};

 7.水果成篮

class Solution {
public:int totalFruit(vector<int>& fruits) {int start = 0, end = 0, subLength = 0, result = 0;unordered_map<int, int> um;for (; end < fruits.size(); end++) {++um[fruits[end]];while (um.size() > 2) {auto it = um.find(fruits[start]);--it->second;if (it->second == 0) {um.erase(it);}++start;}subLength = end - start + 1;result = max(result, subLength);}return result;}
};
// 缩小窗口时也可以直接用下标进行减少,通过键值进行删除,
// 需要注意的是,需要减少的是um[fruits[start]]而不是fruits[start]
class Solution {
public:int totalFruit(vector<int>& fruits) {int start = 0, end = 0, subLength = 0, result = 0;unordered_map<int, int> um;for(; end < fruits.size(); end++) {++um[fruits[end]];while(um.size() > 2) {--um[fruits[start]];if(um[fruits[start]] == 0) {um.erase(fruits[start]);}++start;}subLength = end - start + 1;result = max(result, subLength);}return result;}
};

8.最长无重复子串

class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char, int> win;int left = 0,right = 0;int len = 0;while(right < s.size()) {char c = s[right++];win[c]++;while(win[c] > 1) {char d = s[left--];win[d]--;}len = max(len, right - left);}return len;}
};

9.字符串排列

class Solution {
public:bool checkInclusion(string s1, string s2) {unordered_map<char, int>need, win;for(const char& c : s1) need[c]++;int left = 0, right = 0;int valid = 0;while(right < s2.size()) {char c = s2[right++];if(need.count(c)) {win[c]++;if(win[c] == need[c]) {valid++;}}if(right - left == s1.size()) {if(valid == need.size()) {return true;}char d = s2[left++];if(need.count(d)) {if(win[d] == need[d]) {valid--;}win[d]--;}}}return false;}
};

10.所有字母异位词

class Solution {
public:vector<int> findAnagrams(string s, string p) {unordered_map<char, int>need, win;for(const char& c : p) need[c]++;int left = 0, right = 0;int valid = 0;vector<int> res;while(right < s.size()) {char c = s[right++];if(need.count(c)) {win[c]++;if(win[c] == need[c]) {valid++;}}if(right - left == p.size()) {if(valid == need.size()) {res.push_back(left);}char d = s[left++];if(need.count(d)) {if(win[d] == need[d]) {valid--;}win[d]--;}}}return res;}
}

11.最小覆盖子串

class Solution {
public:string minWindow(string s, string t) {unordered_map<char, int> need, win;for(const char& c : t) need[c]++;int left = 0, right = 0;int valid = 0;int start = 0, len = INT32_MAX;while(right < s.size()) {char c = s[right++];if(need.count(c)) {win[c]++;if(win[c] == need[c]) {valid++;}}while(left < right && valid == need.size()) {if(right - left < len) {len = right - left;start = left;}char d = s[left++];if (need.count(d)) {if(win[d] == need[d]) {valid--;}win[d]--;}}}return len = = INT32_MAX ? "" : s.substr(start, len);}
};

12.哈希解法

class Solution {
public:string minWindow(string s, string t) {vector<int>need(128,0); // 定义哈希数组存储,其中ASCII码共有128个符号for(const char& c : t) {need[c]++;}int left = 0, right = 0;int valid = t.size();int start = 0, len = INT32_MAX;while(right < s.size()) {char c = s[right++];if(need[c] > 0) {    // 只有need中的元素,才可能大于0,因为right遍历是减少,left最多让元素数量恢复原始大小,而只有need中元素初始为大于0valid--;}need[c]--;   // 先把右边的字符加入窗口if(valid == 0) {    // 窗口中已经包含所需的全部字符while(need[s[left]] < 0) {  // 当左边为无效元素或者多余元素(need中过剩的元素)时,缩减窗口need[s[left]]++;left++;}   // while循环后,刚好到达一个必不可少的元素if(right  - left < len) {   // 更新答案len = right - left; // 更新最小长度start = left;    // 更新起始位置}char d = s[left++];need[d]++;  // 左边界右移之前需要释放need[s[l]]valid++;    // 释放了必要元素,valid增加}}return len == INT32_MAX ? "" : s.substr(start,len);}
};

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

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

相关文章

详解Linux手动释放缓存的方法

详解Linux手动释放缓存的方法 Linux释放内存的命令&#xff1a; sync echo 1 > /proc/sys/vm/drop_caches0&#xff1a;不释放&#xff08;系统默认值&#xff09; 1&#xff1a;释放页缓存 2&#xff1a;释放dentries和inodes 3&#xff1a;释放所有缓存 释放完内存后改回…

深入浅出Pytorch函数——torch.nn.Softmax

分类目录&#xff1a;《深入浅出Pytorch函数》总目录 相关文章&#xff1a; 机器学习中的数学——激活函数&#xff1a;Softmax函数 深入浅出Pytorch函数——torch.softmax/torch.nn.functional.softmax 深入浅出Pytorch函数——torch.nn.Softmax 将Softmax函数应用于 n n n…

消息中间件ActiveMQ介绍

一、消息中间件的介绍 介绍 ​ 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流&#xff0c;并基于 数据通信 来进行分布式系统的集成。 特点(作用) 应用解耦 异步通信 流量削峰 (海量)日志处理 消息通讯 …... 应用场景 根据消息队列的特点&a…

题目:2160.拆分数位后四位数字的最小和

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;110. 平衡二叉树 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 获得各位数字后&#xff0c;当较小的两个数字做为十位&#xff0c;较大的两个数字作为个位时所组成的两个两位数之和最小。…

【蓝图】p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统

p40-p43对象引用、变量有效性、实现键盘控制物体自转、简单点名系统 p40对象引用、变量有效性p41实现键盘控制物体自转创建bool值控制旋转实现通过键盘控制自转 p42p43简单点名系统Get All Actors Of Class&#xff08;获得场景中所有该类的actor演员&#xff09;getFor Each L…

postgresql主从搭建

postgresql主从搭建 主从服务器分别安装好postgresql 主库 创建数据库热备帐号replica&#xff0c;密码123456为例&#xff0c;则执行以下命令 create role replica login replication encrypted password 123456;打开 pg_hba.conf 配置文件&#xff0c;设置 replica 用户白…

蓝桥杯专题-真题版含答案-【贪吃蛇长度】【油漆面积】【绘制圆】【高次方数的尾数】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

数据结构之图

一. 常见算法模板 1. 基础代码&#xff0c;具体释义后序有空补充 头文件 #ifndef __GRAPH__H__ #define __GRAPH__H__#include <algorithm> #include <climits> #include <cmath> #include <cstddef> #include <cstdlib> #include <ctime&…

(一)RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理 文章目录 RabbitMQ概念-优势、劣势、应用场景 、AMQP、工作原理RabbitMQ概念RabbitMQ的优势RabbitMQ劣势RabbitMQ应用的场景RabbitMQ_AMQPRabbitMQ工作原理 RabbitM…

Flutter、Android Studio 安装详细步骤以及常错解决

目录 一、前言 二、介绍 三、安装 (一&#xff09;、安装Flutter SDK 1&#xff09;双击文件夹&#xff0c;打开之后就是这样&#xff1a;​编辑 2&#xff09;双击此文件&#xff1a;​编辑 3&#xff09;此过程问题&#xff1a; (二&#xff09;、配置 Flutter SDK 环…

国内疫情地图和省级疫情地图

基础地图演示 from pyecharts.charts import Mapfrom pyecharts.options import VisualMapOpts map Map() data [ ("北京", 99), ("上海", 199), ("湖南", 299), ("台湾", 199), ("安徽", 299), ("广州", 399…

Rust vs Go:常用语法对比(十三)

题图来自 Go vs. Rust: The Ultimate Performance Battle 241. Yield priority to other threads Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call f…

php-golang-rpc使用roadrunner-server/goridge/v3/pkg/rpc和php的spiral/goridge3.2实践

golang代码&#xff1a; go get github.com/roadrunner-server/goridge/v3 package main import ( "fmt" "net" "net/rpc" goridgeRpc "github.com/roadrunner-server/goridge/v3/pkg/rpc" ) type App struct{} func (s *App) Hi(na…

linux文件管理

1.目录架构介绍 1.存放命令相关的目录 # Windows: 以多根的方式组织文件 C: D: # Linux:以单根的方式组织文件 //bin&#xff0c; 普通用户使用的命令 /bin/ls, /bin/date /sbin&#xff0c;管理员使用的命令 /sbin/service,poweroff,useradd…只要看到bin路径&#xff0c;就应…

7.27 作业 QT

要求&#xff1a; 结果图&#xff1a; clock.pro: QT core gui QT texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated …

yarn-session下的flink应用的提交与关闭

flink on yarn 部署 下载Flink安装包 https://flink.apache.org/downloads/ 解压安装包 cd /bigdata/opt/f/flink tar -zxvf flink-1.13.6-bin-scala_2.12.tgz mv flink-1.13.6 yarn_flink-1.13.6编辑conf目录下的flink-conf.yaml jobmanager.rpc.address: u122 jobmanage…

Bootstrap框架(组件)

目录 前言一&#xff0c;组件1.1&#xff0c;字体图标1.2&#xff0c;下拉菜单组件1.2.1&#xff0c;基本下拉菜单1.2.2&#xff0c;按钮式下拉菜单 1.3&#xff0c;导航组件1.3.1&#xff0c;选项卡导航1.3.2&#xff0c;胶囊式导航1.3.3&#xff0c;自适应导航1.3.4&#xff…

React 组件使用

React 组件是一个 js 函数&#xff0c;函数可以添加 jsx 标记 当前页使用组件&#xff0c;基本使用 注意&#xff1a;组件的名称&#xff0c;第一个字母一定要大写&#xff0c;否则会报错 import { createRoot } from "react-dom/client"; import "./index.c…

(三)springboot实战——web新特性之函数式实现

前言 本节内容我们主要介绍一下web访问的另一种形式&#xff0c;通过函数式web实现一个restful风格的http请求案例。函数式web是spring5.2之后的一个新特性&#xff0c;可以通过函数去定义web请求的处理流程&#xff0c;使得代码更为简洁&#xff0c;耦合性也降低了。 正文 …

[Linux] 初识应用层协议: 序列化与反序列化、编码与解码、jsoncpp简单使用...

写在应用层之前 有关Linux网络, 之前的文章已经简单演示介绍了UDP、TCP套接字编程 相关文章: [Linux] 网络编程 - 初见UDP套接字编程: 网络编程部分相关概念、TCP、UDP协议基本特点、网络字节序、socket接口使用、简单的UDP网络及聊天室实现… [Linux] 网络编程 - 初见TCP套接…