刷爆Leetcode Day4

devtools/2024/10/22 0:02:23/

leetcode

  • 16. 最小覆盖子串(hard)
  • 17. 二分查找(easy)
  • 18. 在排序数组中查找元素的第⼀个和最后⼀个位置(medium)
  • 19.搜索插入位置(easy)
  • 20. x的平方根(easy)

16. 最小覆盖子串(hard)

最小覆盖子串

#define MAX 100001
class Solution {
public:string minWindow(string s, string t) {int src_hash[128];int kind=0;//统计子串字符种类数int len=MAX;//标志最长数int begin=-1;for(auto ch:t){if(src_hash[ch]==0)kind++;src_hash[ch]++;}int des_hash[128];for(int left=0,right=0,count=0;right<s.size();right++){char in=s[right];des_hash[in]++;//进窗口if(des_hash[in]==src_hash[in])count++;//只有字符相同且数量相同才是相同的种类while(count==kind)//更新结果{if(len>right-left+1){len=right-left+1;begin=left;}char out=s[left];if(des_hash[out]==src_hash[out])count--;//只有字符相同且数量相同才是相同的种类des_hash[out]--;left++;}}if(begin==-1)return{};elsereturn s.substr(begin,len);  }
};

17. 二分查找(easy)

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)/2;//向下取整if(nums[mid]>target)right=mid-1;else if(nums[mid]<target)left=mid+1;else return mid;}return -1;  }
};

18. 在排序数组中查找元素的第⼀个和最后⼀个位置(medium)

在排序数组中查找元素的第⼀个和最后⼀个位置

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {//处理边界情况if(nums.size()==0)return {-1,-1};//找左端点和右端点//找左端点//左端点的左区间是小于target,右区间是大于等于target//左端点就是左区间趋近右区间最后重合的地方//右端点的左区间是小于等于target,右区间是大于target//右端点就是右区间趋近左区间区间最后重合的地方int left=0,right=nums.size()-1;int begin=0;//标记左端点while(left<right)//left等于right时为左端点另做判断{int mid=left+(right-left)/2;//左区间在动因此向上取整if(nums[mid]<target){left=mid+1;}else{right=mid;}}if(nums[left]==target)begin=left;else return{-1,-1};left=0,right=nums.size()-1;while(left<right)//left等于right时为右端点另做判断{int mid=left+(right-left+1)/2;//左区间不动因此向下取整if(nums[mid]<=target){left=mid;}else{right=mid-1;}}return {begin,right};}
};

19.搜索插入位置(easy)

搜索插入位置

class Solution {
public:int searchInsert(vector<int>& nums, int target) {//找左端点//左端点的左区间小于target//左端点的右区间大于等于targetint left=0,right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]<target)left=mid+1;elseright=mid;}if(nums[left]<target)return left+1;return left;}
};

20. x的平方根(easy)

x的平方根

class Solution {
public:int mySqrt(int x) {//右端点问题if(x<1)return 0;//处理边界情况int left=1,right=x;while(left<right){long long mid=left+(right-left+1)/2;long long sqrt=mid*mid;if(sqrt<=x){left=mid;}else{right=mid-1;}}return left; }
};

http://www.ppmy.cn/devtools/127685.html

相关文章

Qt学习笔记第21到30讲

第21讲 new/delete关键字 new关键字 在 C 中&#xff0c; new 关键字用于动态分配内存。它是 C 中处理动态内存分配的主要工具之一&#xff0c;允许在程序运行时根据需要分配内存。 用法 ①分配单个对象&#xff1a;使用 new 可以在堆上动态分配一个对象。例如&#xf…

JVM(HotSpot):直接内存及其使用建议

文章目录 一、什么是直接内存&#xff1f;二、特点三、使用案例四、直接内存的管理 一、什么是直接内存&#xff1f; Direct Memory&#xff1a;系统内存 普通IO&#xff0c;运行原理图 磁盘到系统内存&#xff0c;系统内存到jvm内存。 NIO&#xff0c;运行原理图 划分了一块…

spdlog学习记录

spdlog Loggers&#xff1a;是 Spdlog 最基本的组件&#xff0c;负责记录日志消息。在 Spdlog 中&#xff0c;一个 Logger 对象代表着一个日志记录器&#xff0c;应用程序可以使用 Logger 对象记录不同级别的日志消息Sinks&#xff1a;决定了日志消息的输出位置。在 Spdlog 中&…

01-编程入门

文章目录 Python学习方向什么是编程语言编程语言发展史Python环境安装 Python学习方向 爬虫工程师 ​ 爬虫-模拟用户向服务器发送请求–》爬取数据 ​ 1.娱乐数据、商业数据、付费数据。 ​ 2.搜索引擎&#xff08;百度、谷歌、搜狗&#xff0c;以及一些小网站内的搜索迎引擎&a…

windows免密ssh登录Linux

1.winr打开运行---- 输入&#xff1a;cmd&#xff08;命令提示符&#xff09; 查看系统是否自带openssh ssh -V 2.生成公钥私钥文件 ssh-keygen 3.进入秘钥存放目录 cd C:\Users\admin/.ssh/#查看秘钥文件 dir 4.将公钥文件长传至Linux服务器 scp .\id_rsa.pub root20.20.…

mysql设置远程连接

要使MySQL支持远程连接&#xff0c;需要进行以下操作&#xff1a; 修改MySQL配置文件&#xff08;通常是my.cn.cnf或my.ini&#xff09;&#xff0c;注释掉bind-address这一行&#xff0c;或者将其值设置为0.0.0.0&#xff0c;这样MySQL就能监听所有网络接口。 进入以下目录 …

互联网语言 互联网开发 互联网架构

JAVA和PHP是两种广泛应用于互联网开发的编程语言&#xff0c;它们在多个维度上展现出显著的不同。 JAVA是一种面向对象的编程语言&#xff0c;以其严谨、高效的特性而著称。JAVA的语法结构复杂且规范&#xff0c;强调封装、继承和多态等面向对象原则&#xff0c;适合构建大型企…

对BSV区块链下一代节点Teranode的答疑解惑(下篇)

​​发表时间&#xff1a;2024年8月7日 2024年初BSV区块链研发团队揭晓了即将到来的Teranode更新的突破性特性&#xff0c;这些特性将显著提升网络的效率和处理速度&#xff0c;使BSV区块链能够达到百万级TPS。 Teranode的项目主管Siggi Oskarsson强调&#xff1a;“当你阅读这…