寒假刷代码随想录

数组

二分

在循环中 始终坚持根据查找区间的定义做边界处理
第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。

区间的定义这就决定了二分法的代码应该如何写,因为定义target在[left, right]区间,所以有如下两点:

while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=
if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]while (left <= right) { // 当left==right,区间[left, right]依然有效,所以用 <=int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2if (nums[middle] > target) {right = middle - 1; // target 在左区间,所以[left, middle - 1]} else if (nums[middle] < target) {left = middle + 1; // target 在右区间,所以[middle + 1, right]} else { // nums[middle] == targetreturn middle; // 数组中找到目标值,直接返回下标}}// 未找到目标值return -1;}
};

27. 移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素

数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。(平时是封装了,调用了一层接口:.earse()是O(n)的,后面的元素逐个前移)

26.删除有序数组中的重复项
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。要求删除重复元素,实际上就是将不重复的元素移到数组的左侧。

比较 p 和 q 位置的元素是否相等。
如果相等,q 后移 1 位
如果不相等,将 q 位置的元素复制到 p+1 位置上,p 后移一位,q 后移 1 位
重复上述过程,直到 q 等于数组长度。

class Solution {
public:int removeDuplicates(vector<int>& nums) {int p=0,q=0;while(q<nums.size()){if(nums[p]==nums[q]) q++;else{nums[p+1]=nums[q];p++;q++;}}return p+1;}
};

283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。

class Solution {
public:void moveZeroes(vector<int>& nums) {int p=0,q=0;while(q<nums.size()){if(nums[p]==0 && nums[q]!=0) swap(nums[p],nums[q]),p++,q++;else if(nums[p]==0 && nums[q]==0) q++;else p++,q++;}}
};

977.有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
分界是 第一个非零的数。双指针实现归并排序

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int reg = 0;while(reg < nums.size()){if(nums[reg]>=0) break;else{reg ++;}}vector<int> res;//[0,reg-1]减 [reg,size]增int p = reg-1,q = reg;while(p>=0 && q<nums.size()){if(pow(nums[p],2) <= pow(nums[q],2)) res.push_back(pow(nums[p],2)),p--;else res.push_back(pow(nums[q],2)),q++;}while(p>=0) res.push_back(pow(nums[p--],2));while(q<nums.size()) res.push_back(pow(nums[q++],2));return res;}
};

209.长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [ n u m s l , n u m s l + 1 , . . . , n u m s r − 1 , n u m s r ] [nums_l, nums_{l+1}, ..., nums_{r-1}, nums_r] [numsl,numsl+1,...,numsr1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

  • 超时了,前缀和+二分
    class Solution {
    public:int midsearch(vector<int> a,int l,int r,int target){if (a[r] < target) return -1;while(l<r){int mid = (l+r)>>1;if(a[mid]>=target) r=mid;else if(a[mid]<target) l=mid+1;}return l;}int minSubArrayLen(int s, vector<int>& nums) {int n = nums.size();if(n==0) return 0;vector<int> sums(n+1,0);for(int i=1;i<=n;i++)sums[i]=sums[i-1]+nums[i-1];int ans = INT_MAX;for(int i=1;i<=n;i++){int target = s + sums[i-1];int bound = midsearch(sums,1,n,target);if(bound !=-1)ans = min(ans,bound-(i-1));}return ans == INT_MAX ? 0 : ans;}
    };
    
  • 滑动窗口:滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。从而将O(n^2)暴力解法降为O(n)
    循环的索引,一定是表示 滑动窗口的终止位置
    class Solution {
    public:int minSubArrayLen(int s, vector<int>& nums) {int l=0,r=0;int tmp=0;int res = INT_MAX;while(r<nums.size()){//循环是rtmp += nums[r];//窗口都是以r加的while(tmp>=s){res=min(res,r-l+1);//更新结果tmp-=nums[l];//退l,l++l++;} r++;}return res==INT_MAX?0:res;}
    };
    

不要以为for里放一个while就以为是O(n^2)啊, 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。

904. 水果成篮
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

class Solution {
public:int totalFruit(vector<int>& fruits) {int l=0,r=0;int ans=0;unordered_map<int,int> box; while(r<fruits.size()){box[fruits[r]]++;//窗口都是以r加的while(box.size()>2){auto it=box.find(fruits[l]);it->second--;if(it->second==0) box.erase(it);l++;}ans=max(ans,r-l+1);r++;}return ans;}
};

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

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

相关文章

JMeter HTTP请求的详细指南,还不知道的快来看

HTTP请求简介 在JMeter中&#xff0c;服务器名称和它的路径对于检查请求是否到达了正确的目的地非常重要。默认情况下&#xff0c;HTTP协议与请求一起被遵循&#xff0c;如果需要&#xff0c;可以转换为HTTPS。如果需要&#xff0c;用户参数可以包含在特定页面的请求中。如果&a…

MySQL查询缓存

MySQL查询缓存 MySQL在查询的时候首先会查询缓存&#xff0c;如果缓存命中的话就直接返回结果&#xff0c;不需要解析sql语句&#xff0c;也不会生成执行计划&#xff0c;更不会执行&#xff1b;如果没有命中缓存&#xff0c;则再进行SQL解析以及进行查询&#xff0c;并将结果返…

机器学习系列-2 线性回归训练损失

机器学习系列-2 线性回归&训练损失 学习内容来自&#xff1a;谷歌ai学习 https://developers.google.cn/machine-learning/crash-course/framing/check-your-understanding?hlzh-cn 本文作为学习记录1 线性回归&#xff1a; 举例&#xff1a;蝉&#xff08;昆虫物种&…

安装配置sqoop

一、了解Sqoop 1、Sqoop产生的原因 A. 多数使用hadoop技术的处理大数据业务的企业,有大量的数据存储在关系型数据中。 B. 由于没有工具支持,对hadoop和关系型数据库之间数据传输是一个很困难的事。 以上是sqoop产生的主要原因,也因此Sqoop主要用于hadoop与关系型数据库之…

java下载网络文件

/*** 下载文件** param urlStr* param response* throws Exception*/ GetMapping("/downLoadFile") public void downLoadFile(String urlStr, HttpServletResponse response) throws Exception{// 定义一个URL对象&#xff0c;就是你想下载的图片的URL地址URL url …

【C++】类和对象2:this指针

前言 今天来学习this指针 引入 我们用一个日期Date类来举个例子 class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}void Print(){cout <<_year<< "-" <<_month << "-"<…

深度学习:数据驱动的人工智能革命

文章目录 每日一句正能量前言什么是深度学习推动AI发展不同阶段的“三大驱动 ”1、技术驱动&#xff1a;算法和计算力是主要驱动力2、计算力的三驾马车&#xff1a;芯片、超级计算机、云计算3、数据驱动&#xff1a;描绘个性化画像&#xff1b; 后记 每日一句正能量 一般青年的…

自然语言处理(02/10):自然语言处理任务和应用程序

一、描述 在广阔的人工智能领域&#xff0c;自然语言处理 &#xff08;NLP&#xff09; 是一个迷人而充满活力的领域。NLP 弥合了计算机和人类语言之间的鸿沟&#xff0c;使机器能够理解、解释和生成类似人类的文本。这项变革性技术具有深远的影响&#xff0c;影响着我们日常生…

telnet笔记

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、场景二、介绍1.测试端口2.访问百度3. 简单的爬虫 前言 最近telnet命令用的比较多&#xff0c;所以记录一下。 一、场景 ping应该是大家最常用的命令&…

深入理解Istio服务网格数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中&#xff0c;服务间的调用&#xff0c;业务代码需要考虑认证、熔断、服务发现等非业务能力&#xff0c;在某种程度上&#xff0c;表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力&#xff0c;认证、熔断、服…

macOS的设置与常用软件(含IntelliJ IDEA 2023.3.2 Ultimate安装,SIP的关闭与开启)

目录 1 系统设置1.1 触控板1.2 键盘 2 软件篇2.1 [科学上网](https://justmysocks5.net/members/)2.1 [安装Chrome浏览器](https://www.google.cn/chrome/index.html)2.2 [安装utools](https://www.u.tools)2.3 [安装搜狗输入法](https://shurufa.sogou.com/)2.4 [安装snipaste…

一、Redis之NoSQL

1.1 什么是NoSQL NoSQL&#xff08;Not Only SQL&#xff09;即不仅仅是SQL&#xff0c;泛指非关系型的数据库&#xff0c;它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起&#xff0c;非关系型的数据库现在成了一个极其热门的新领域&#xff0c;非关系数据库产…

微服务架构中的关键组件:Dubbo、Nacos、Feign 和 Eureka

在构建微服务架构时&#xff0c;服务发现、配置管理和服务调用是不可或缺的组成部分。本文将详细介绍三个在这些领域中广泛使用的开源项目&#xff1a;Dubbo、Nacos 和 Eureka&#xff0c;它们各自的特点、区别以及适用的场景。 Dubbo Dubbo 是一个由阿里巴巴开源的高性能、轻…

【Git】03 图形化工具

文章目录 一、右击菜单二、打开仓库三、可视化所有分支历史四、总结 一、右击菜单 二、打开仓库 三、可视化所有分支历史 四、总结 图形化工具了解一下&#xff0c;要懂得在哪里能找到。

Vue工程引入Element-ui

npm 安装ELement-ui npm i element-ui -S 于package.json中发现有“element-ui”版本号即可 引入 Element 在 main.js 中写入以下内容&#xff1a; import element-ui/lib/theme-chalk/index.css; import ElementUI from element-ui;Vue.use(ElementUI);之后根据自己的需求设计…

数据库指定某个列的某个值优先排序

有时候接到这么一个需求&#xff0c;就是指定某个商品某个品牌优先展示&#xff0c;那么数据库SQL该怎么实现呢&#xff1f; 比如商品表&#xff08;goods&#xff09;&#xff0c;有个品牌字段&#xff08;brand&#xff09;&#xff0c;公司要求优先展示【华为】品牌的商品&…

代码随想录二刷——栈与队列day11

文章目录 前言栈与队列知识点 一、 20. 有效的括号二、1047. 删除字符串中的所有相邻重复项三、150. 逆波兰表达式求值总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划二刷完卡子哥的刷题计划&#xff0c;加油&#xff01; 二刷决定精刷了&#xff0…

质量管理 了解

定义 质量管理就是在一定的技术经济条件下&#xff0c;为保证和提高产品质量所进行的一系列经营管理活动的总称。该管理活动包括质量管理体系的制定&#xff0c;质量的控制&#xff0c;质量的验收与评定等相关内容。 国际标准和国家标准的定义&#xff1a;质量管理是“在质量方…

位运算之妙用:识别独特数字(寻找单身狗)

目录 找单身狗1 图解&#xff1a; 代码如下&#xff1a; 找单身狗2 图解&#xff1a; 代码如下&#xff1a; 寻找单身狗1 从数组中 的1 2 3 4 5 1 2 3 4 中找出没有另一个相同的数与其匹配的数 这个问题的原理是利用异或运算的性质。异或运算&#xff08;XOR&#xff09…

(c语言版)开源项目热榜,某个开源社区希望将最近热度比较高的开源项目出一个榜单,推荐给社区里面的开发者。对于每个开源项目

某个开源社区希望将最近热度比较高的开源项目出一个榜单&#xff0c;推荐给社区里面的开发者。对于每个开源项目&#xff0c;开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数据库里面统计了每个开源项目关注、收藏、fork、issue、MR的数量&…