刷题(day01)

1、leetcode485.最大连续1的个数

给定一个二进制数组 nums , 计算其中最大连续 1 的个数。

示例 1:

输入:nums = [1,1,0,1,1,1]
输出:3
解释:开头的两位和最后的三位都是连续 1 ,所以最大连续 1 的个数是 3.

示例 2:

输入:nums = [1,0,1,1,0,1]
输出:2

提示:

  • 1 <= nums.length <= 10^5
  • nums[i] 不是 0 就是 1.

① 常规思路:遍历数组,记录连续1的个数,比较是否是当前最大个数。

public class Solution {public int findMaxConsecutiveOnes(int[] nums) {int count = 0;int result = 0;for (int i = 0; i < nums.length; i++) {if(nums[i] == 1){count ++;}else{result = Math.max(count,result);count = 0;}result = Math.max(count,result);}return result;}
}

② 滑动窗口思路:

当输出或比较的结果在原数据结构中是连续排列的时候,可以使用滑动窗口算法求解。

将两个指针比作一个窗口,通过移动指针的位置改变窗口的大小,观察窗口中的元素是否符合题意。

  1. 初始窗口中只有数组开头一个元素。
  2. 当窗口中所有元素为1时,右指针向右移动,扩大窗口。
  3. 当窗口中存在 0 时,计算连续序列长度,左指针指向右指针。
public class Solution {public int findMaxConsecutiveOnes(int[] nums){int length = nums.length;int left = 0;int right = 0;int maxSize = 0;while(right < length){//当滑动窗口所有元素为 1 时,右指针向右移,扩大窗口if(nums[right++] == 0){//当窗口中存在 0 时,计算连续序列长度,左指针指向右指针maxSize = Math.max(maxSize,right - left - 1);left = right;}}//因为最后一连续序列在循环中无法比较,所以在循坏外进行比较return Math.max(maxSize,right - left);}
}

 2、leetcode26.删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

判题标准:

系统会用下面的代码来测试你的题解:

int[] nums = [...]; // 输入数组
int[] expectedNums = [...]; // 长度正确的期望答案
int k = removeDuplicates(nums); // 调用
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {assert nums[i] == expectedNums[i];
}

如果所有断言都通过,那么您的题解将被 通过

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。
不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。不需要考虑数组中超出新长度后面的元素。

提示:

  • 1 <= nums.length <= 3 * 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums 已按 非严格递增 排列

① 解题思路:双指针

首先注意数组是有序的,那么重复的元素一定会相邻,要求删除重复,实际上就是将不重复的元素移到数组的左侧。考虑用到 2 个指针,一个在前记作 i,一个在后记作 j。

比较 i 和 j 位置的元素是否相等,如果相等,i 后移 1 位,如果不相等,将 i 位置的元素复制到 j + 1 位置上,j 后移 1 位,i 后移 1 位重复上述过程,知道 i 等于数组长度。返回 j + 1,即为新数组长度。

class Solution {public int removeDuplicates(int[] nums) {if(nums == null || nums.length == 0) return 0;int n = nums.length;int j = 0;for(int i = 0;i < n;i ++){if(nums[i] != nums[j]){nums[++j] = nums[i];}}return j + 1;}
}

3、leetcode283.移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]输出: [1,3,12,0,0]示例 2:
输入: nums = [0]输出: [0]

提示:

  • 1 <= nums.length <= 10^4
  • -231 <= nums[i] <= 231 - 1 

① 两次遍历

思路:我们创建两个指针 i 和 j,第一次遍历的时候指针 j 用来记录当前有多少 非0 元素。即遍历的时候每遇到一个 非0 元素就将其往数组左边挪,每一次遍历完后,j 指针的下标就指向了最后一个 非0 元素下标。第二次遍历的时候,起始位置就从 j 开始到结束,将剩下的这段区域内的元素全部置为0。

class Solution {public void moveZeroes(int[] nums) {if(nums==null) return;//第一次遍历的时候,j指针记录非0的个数,只要是非0的统统都赋给nums[j]int j = 0;for(int i=0;i<nums.length;++i) {if(nums[i]!=0) {nums[j++] = nums[i];}}//非0元素统计完了,剩下的都是0了//所以第二次遍历把末尾的元素都赋为0即可for(int i=j;i<nums.length;++i) {nums[i] = 0;}}
}

②一次遍历

如下所示,我们可以将 j 移动到自身右侧第一个元素为 0 的位置,将 i 移动到 j 右侧第一个元素非 0 的位置,然后交换元素。

 然后再执行上一步骤,循环下去,直至 i 抵达边界。

class Solution {public void moveZeroes(int[] nums) {if(nums==null) {return;}//两个指针i和jint j = 0;for(int i=0;i<nums.length;i++) {//当前元素!=0,就把其交换到左边,等于0的交换到右边if(nums[i]!=0) {int tmp = nums[i];nums[i] = nums[j];nums[j++] = tmp;}}}
}	

4、leetcode27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

用户评测:

评测机将使用以下代码测试您的解决方案:

int[] nums = [...]; // 输入数组
int val = ...; // 要移除的值
int[] expectedNums = [...]; // 长度正确的预期答案。// 它以不等于 val 的值排序。int k = removeElement(nums, val); // 调用你的实现assert k == expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 个元素
for (int i = 0; i < actualLength; i++) {assert nums[i] == expectedNums[i];
}

如果所有的断言都通过,你的解决方案将会 通过

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3,_,_,_]
解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

提示:

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

 ① 拷贝覆盖

思路:遍历数组 nums,在遍历过程中如果出现数字与需要移除的值不相同时,则进行拷贝覆盖,如果相同的时候,则跳过该数字不进行拷贝覆盖,最后 j 即为新的数组长度

这种思路在移除元素较多时更适合使用,最极端的情况是全部元素需要移除,遍历一遍结束即可。

class Solution {public int removeElement(int[] nums, int val) {int j = 0;for(int i = 0;i < nums.length;i ++) {if(nums[i] != val) {nums[j ++] = nums[i];}}return j;}
}

② 交换移除

思路:遍历数组 nums,在遍历过程中如果出现数字与需要移除的值不相同时,则 i 自增 1,继续下一次遍历,如果相同的时候,则将 nums[i] 与 nums[ans - 1] 交换,即当前数字和数组最后一个数字进行交换,交换后就少了一个元素,故而 ans 自减 1

这种思路在移除元素较少时更适合使用,最极端的情况是没有元素需要移除,遍历一遍结束即可。

class Solution {public int removeElement(int[] nums, int val) {int j = nums.length;for (int i = 0; i < nums.length;) {if (nums[i] == val) {nums[i] = nums[-- j];             } else {i++;}}return j;}
}

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

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

相关文章

Nginx 高效加速策略:动静分离与缓存详解

在现代Web开发中&#xff0c;网站性能是衡量用户体验的关键指标之一。Nginx&#xff0c;以其出色的性能和灵活性&#xff0c;成为众多网站架构中不可或缺的一部分。本文将深度解析如何利用Nginx实现动静分离与缓存&#xff0c;从而大幅提升网站加载速度和响应效率。 理解动静分…

昇思第18天打卡|ShuffleNet图像分类

ShuffleNet网络介绍 ShuffleNetV1是旷视科技提出的一种计算高效的CNN模型&#xff0c;和MobileNet, SqueezeNet等一样主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointw…

张大哥笔记:你一旦开窍,就会发现遍地都是钱

大家有没有发现&#xff0c;穷人总是追逐眼前的利益&#xff0c;总是在追着钱跑&#xff0c;却总是赚不到钱。而富人有着长远的见识&#xff0c;追着问题跑&#xff0c;最后却赚的盆满钵满。 我们听过这样一句话&#xff0c;钱不是赚来的&#xff0c;而是帮助别人解决问题后给你…

【计算机】同步/异步

同步/异步 在计算机科学和编程中&#xff0c;“同步”&#xff08;Synchronization&#xff09;是一种机制&#xff0c;用于协调不同进程或线程之间的操作&#xff0c;以避免竞态条件&#xff08;race conditions&#xff09;、死锁&#xff08;deadlocks&#xff09;和其他并…

Qt/C++编写地图应用/离线地图下载/路径规划/轨迹回放/海量点/坐标转换

一、前言说明 这个地图组件写了很多年了&#xff0c;最初设计的比较粗糙&#xff0c;最开始只是为了满足项目需要&#xff0c;并没有考虑太多拓展性&#xff0c;比如最初都是按照百度地图写死在代码中&#xff0c;经过这几年大量的现场实际应用&#xff0c;以及大量的用户提出…

Django 新增数据 save()方法

1&#xff0c;添加模型 Test/app11/models.py from django.db import modelsclass Book(models.Model):title models.CharField(max_length100)author models.CharField(max_length100)publication_date models.DateField()price models.DecimalField(max_digits5, decim…

BFC 是什么?

BFC 是块级格式化上下文&#xff08;Block Formatting Context&#xff09;的缩写&#xff0c;是 CSS 中一个重要的概念&#xff0c;用于控制块级盒子的布局及浮动元素的交互。BFC 是一个独立的渲染区域&#xff0c;内部的块级盒子会按照特定的规则进行布局&#xff0c;不会影响…

软件工程(上)

目录 软件过程模型&#xff08;软件开发模型&#xff09; 瀑布模型 原型模型 V模型 构件组装模型 螺旋模型&#xff08;原型瀑布&#xff09; 基于构件的软件工程&#xff08;CBSE&#xff09; 快速应用开发模型&#xff08;RAD&#xff09; 统一过程&#xff08;UP&a…

Linux学习看这一篇就够了,超超超牛的Linux基础入门

引言 小伙伴们&#xff0c;不管是学习c还是学习其他语言在我们学的路上都绕不过操作系统&#xff0c;而且&#xff0c;老生常谈的Linux更是每个计算机人的必修&#xff0c;那么我们对Linux的了解可能只是从别人那听到的简单的这个系统很牛&#xff0c;巴拉巴拉的&#xff0c;但…

大模型日报 2024-07-08

大模型日报 2024-07-08 大模型资讯 Anthropic CEO&#xff1a;大模型训练成本暴涨&#xff0c;2027年将达1000亿美元&#xff01; Anthropic首席执行官表示&#xff0c;当前AI模型训练成本是10亿美元&#xff0c;未来三年&#xff0c;这个数字可能会上升到100亿美元甚至1000亿美…

GitLab管理员常用配置及设置汇总

​ 之前在 虚拟机Ubuntu 22.04上搭建GitLab操作步骤 上介绍了在Ubuntu 22.04上如何搭建社区版的GitLab&#xff0c;这里整理下作为GitLab管理员时在搭建完GitLab CE后&#xff0c;如何对其进行配置或设置 更改仓库存储位置&#xff1a;切换到root用户下操作 默认存放位置&…

SSL 证书

自动获取 Lets Encrypt 免费证书 &#xff08;适用于 Linux 系统&#xff09; 安装 Certbot sudo apt-get update sudo apt-get install certbot python3-certbot-nginx # Nginx 服务器 sudo apt-get install certbot python3-certbot-apache # Apache 服务器 获取和安装证…

小米rdemi红米ax3000t刷机 20240707最新配套完整程序整理合集

小米rdemi红米ax3000t刷机程序地址&#xff1a; https://www.123pan.com/s/LA1bVv-EOzVv.html 小米路由器SSH密码计算器 https://www.1234f.com/fuwu/ax3000t/ 最新更新地址&#xff1a;https://www.1234f.com/fuwu/openwrt/ 依次输入如下命令&#xff1a; curl -X POST h…

Leetcode 295.数据流的中位数

295.数据流的中位数 问题描述 中位数是有序整数列表中的中间值。如果列表的大小是偶数&#xff0c;则没有中间值&#xff0c;中位数是两个中间值的平均值。 例如 arr [2,3,4] 的中位数是 3 。例如 arr [2,3] 的中位数是 (2 3) / 2 2.5 。 实现 MedianFinder 类: Media…

算法013:水果成篮

水果成篮. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/fruit-into-baskets/ 这道题题目很长&#xff0c;仔细阅读过后&#xff0c;我们其实可以简化成&#xff…

MySQL 9.0新特性:向量存储

MySQL 9.0 正式版已经发布&#xff0c;其中一个亮点就是向量&#xff08;VECTOR&#xff09;数据类型的支持&#xff0c;本文给大家详细介绍一下这个新功能。 向量类型 MySQL 9.0 增加了一个新的向量数据类型&#xff1a;VECTOR。它是一种可以存储 N 个数据项的数据结构&…

Redis Stream:实时数据流的处理与存储

Redis Stream:实时数据流的处理与存储 引言 在当今数据驱动的世界中,实时数据处理和存储成为了许多应用的核心需求。Redis Stream作为一种新兴的数据结构,为Redis带来了强大的流处理能力。本文将深入探讨Redis Stream的特点、使用场景以及如何高效地利用它来处理实时数据流…

聚焦数字创新,定义影像未来

国际数字影像产业园在明确产业定位与发展方向时&#xff0c;应聚焦于数字影像、文创、媒体等新兴产业领域&#xff0c;以技术创新为核心动力、产业升级为保障、市场拓展为途径、国际化发展为方向&#xff0c;推动园区的持续健康发展。 作为园区的核心产业&#xff0c;数字影像产…

python socks5代理的使用

需要安装依赖 1、解决方法1 In order to make requests use socks proxy, you need to install it with it’s dependency. pip install requests[socks]2、解决方法2 pip install PySocks