leetcode——移除数组
26.删除有序数组中的重复项
给你一个 非严格递增排列 的数组
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 * 104
-104 <= nums[i] <= 104
nums
已按 非严格递增 排列
原理
初始化两个指针:
left
:指向当前有效元素的最后位置,起始值为 0。right
:指向当前正在遍历的元素,起始值为 0。遍历整个数组:
- 使用
right
指针遍历整个数组。- 如果
nums[left]
等于nums[right]
,说明nums[right]
是一个重复的元素,right
指针右移,继续向右遍历。- 如果
nums[left]
不等于nums[right]
,说明找到了一个新的、未出现过的元素。此时,left
指针向右移动,并将nums[right]
的值赋给nums[left]
。返回数组的有效长度:
- 最后,返回
left + 1
,这是新的数组长度,因为left
是最后一个有效元素的索引。为什么返回
left + 1
:
left
指针指向的是数组中唯一元素的最后一个位置,而数组的长度是从 0 开始的,所以最终的长度应该是left + 1
。复杂度分析:
时间复杂度:
O(n),其中 n 是数组的长度。我们只需要一次遍历数组,进行常数时间的操作。空间复杂度:
O(1),使用了两个指针,额外的空间开销为常数。
代码
class Solution {public int removeDuplicates(int[] nums) {// 如果数组为空,直接返回0if (nums.length == 0) {return 0;}// 初始化两个指针,left 和 rightint left = 0, right = 0;// 使用 right 指针遍历整个数组while (right < nums.length) {// 如果 left 和 right 指向的元素相同,说明 right 指向的元素是重复的,右指针右移if (nums[left] == nums[right]) {right++;} else {// 如果 left 和 right 指向的元素不相同,说明 nums[right] 是新的元素left++; // left 向右移动,准备接收新元素nums[left] = nums[right]; // 将新元素放到 left 后}}// 返回新的数组长度,即 left + 1return left + 1;}
}
283.移动零
给定一个数组
nums
,编写一个函数将所有0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]
输出:[0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
进阶:你能尽量减少完成的操作次数吗?
原理
初始化指针:
left
:指向当前未处理的非零元素的目标位置,起始时指向数组的第一个位置。right
:指向当前正在检查的元素,起始时也是指向数组的第一个位置。第一次遍历:
- 在数组中查找第一个
0
。一旦找到0
,我们初始化left
和right
指针,且right
从当前0
开始遍历,left
用来标记非零元素将要被移动的位置。- 如果没有找到
0
,则left
和right
都会指向数组的最后一个元素,此时数组中已经没有0
,可以直接返回。第二次遍历:
right
指针继续向右遍历整个数组。- 如果
right
指向的是0
,说明当前元素不需要处理,继续向右移动right
指针。- 如果
right
指向的是非零元素,说明这是一个需要移动的元素。我们将这个元素交换到left
指针的位置,并将left
向右移动。然后,我们将当前right
指向的位置置为0
,继续处理下一个元素。最终结果:
- 最终,所有的非零元素都会被移动到数组的前面,所有的
0
都会被移动到数组的末尾。复杂度分析:
时间复杂度:
O(n),其中 n 是数组的长度。我们进行了两次遍历,第一遍是找第一个0
,第二遍是对数组进行重排。空间复杂度:
O(1),我们只使用了常数空间来存储两个指针left
和right
,没有额外使用其他数据结构。
代码
class Solution {public void moveZeroes(int[] nums) {// 如果数组长度为 1,直接返回,因为不存在移动的必要if (nums.length == 1) {return;}// 初始化两个指针,left 和 rightint left = 0, right = 0;// 第一次遍历,找到第一个 0,初始化 left 和 rightfor (int i = 0; i < nums.length; i++) {// 如果当前元素是 0,初始化 left 和 right 指针if (nums[i] == 0) {left = right = i;break;}left++;right++;}// 如果数组中没有 0,直接返回if (left == nums.length) {return;}// 第二次遍历,进行移动操作while (right < nums.length) {// 如果 right 指向的是 0,继续向右移动if (nums[right] == 0) {right++;}// 如果 right 指向的是非 0 元素,将该元素移动到 left 位置,并将该位置置为 0else {int temp = nums[right]; // 记录非零元素nums[right] = 0; // 将右边的元素置为 0nums[left++] = temp; // 将非零元素放到左边的空位上}}}
}
844.比较含退格的字符串
给定
s
和t
两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回true
。#
代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。
示例 1:
输入:s = "ab#c", t = "ad#c" 输出:true 解释:s 和 t 都会变成 "ac"。示例 2:
输入:s = "ab##", t = "c#d#" 输出:true 解释:s 和 t 都会变成 ""。示例 3:
输入:s = "a#c", t = "b" 输出:false 解释:s 会变成 "c",但 t 仍然是 "b"。提示:
1 <= s.length, t.length <= 200
s
和t
只含有小写字母以及字符'#'
进阶:
- 你可以用
O(n)
的时间复杂度和O(1)
的空间复杂度解决该问题吗?
原理
初始化两个指针:
right1
和right2
分别指向字符串s
和t
的最后一个字符。它们将用于从右到左遍历字符串。count1
和count2
用来处理退格符#
,即跳过退格符后的字符。遍历字符串:
处理
#
退格符:
如果当前字符是#
,则意味着我们需要删除一个字符。通过循环,跳过所有连续的#
退格符,并且每次遇到#
时向左移动指针,直到找到一个有效字符。然后继续比较下一个字符。非
#
字符:
如果遇到的不是退格符#
,就直接将当前字符移到下一个位置进行比较。结束条件:
- 当
right1
和right2
都指向有效字符时,检查两个字符是否相等。如果不相等,则返回false
。- 当两个字符串都遍历完且没有不匹配的字符时,返回
true
。边界情况:
- 如果两个字符串中有退格符导致的空字符,则跳过空字符,继续向左遍历直到遇到有效字符。
复杂度分析:
时间复杂度:
O(n),其中n
是字符串的长度。在最坏情况下,每个字符会被遍历一次。空间复杂度:
O(1),只使用了常数空间存储指针right1
和right2
,没有使用额外的空间。
代码
class Solution {public boolean backspaceCompare(String s, String t) {// 初始化两个指针,分别指向两个字符串的最后一个字符int right1 = s.length() - 1, count1 = 0;int right2 = t.length() - 1, count2 = 0;// 当两个字符串还有字符待处理时,继续循环while (right1 >= 0 || right2 >= 0) {// 处理字符串 s 的当前字符if (right1 >= 0) {if (s.charAt(right1) == '#') { // 如果当前字符是退格符 '#'// 退格符需要跳过一个字符,因此记录 count1int temp = right1;right1 -= 2; // 跳过退格符并定位到退格前的位置count1 = 1;// 循环跳过所有退格符,并处理被退格删除的字符while (count1 != 0) {count1 = 0;int right11 = right1, temp1 = temp;for (int i = Math.max(0, right11); i < temp1; i++) {if (s.charAt(i) == '#') {right1 -= 2;if (right1 < 0) {count1 = 0;continue;}count1++;}}temp = right11;if (count1 == 0) {right1--;}}} else {// 如果当前字符不是 '#', 就直接向左移动right1--;}} else {right1--; // 确保索引有效}// 处理字符串 t 的当前字符if (right2 >= 0) {if (t.charAt(right2) == '#') { // 如果当前字符是退格符 '#'// 退格符需要跳过一个字符,因此记录 count2int temp = right2;right2 -= 2; // 跳过退格符并定位到退格前的位置count2 = 1;// 循环跳过所有退格符,并处理被退格删除的字符while (count2 != 0) {count2 = 0;int right21 = right2, temp2 = temp;for (int i = Math.max(0, right21); i < temp2; i++) {if (t.charAt(i) == '#') {right2 -= 2;if (right2 < 0) {count2 = 0;continue;}count2++;}}temp = right21;if (count2 == 0) {right2--;}}} else {// 如果当前字符不是 '#', 就直接向左移动right2--;}} else {right2--; // 确保索引有效}// 比较两个字符串的当前字符,如果不相等则返回 falseif (right1 < -1 && right2 < -1) {return true;} else if (right1 == -1 && right2 < -1) {return false;} else if (right1 < -1 && right2 == -1) {return false;} else if (right1 >= -1 && right2 < -1) {return false;} else if (right2 >= -1 && right1 < -1) {return false;} else if (s.charAt(right1 + 1) != t.charAt(right2 + 1)) {return false;}}return true; // 如果遍历完成都没有不相等的字符,则返回 true}
}
977.有序数组的平方
给你一个按 非递减顺序 排序的整数数组
nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]示例 2:
输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
已按 非递减顺序 排序进阶:
- 请你设计时间复杂度为
O(n)
的算法解决本问题
原理1
问题分析:
- 给定一个按非递减顺序排列的整数数组
nums
,需要返回一个包含每个数字平方的新数组,并且结果数组同样按非递减顺序排列。- 数字的平方后,负数变为正数,因此数组中可能有负数、零和正数。为了有效处理这种情况,考虑使用双指针的方法来同时遍历负数部分和正数部分。
双指针法的思路:
- 使用两个指针,
left
和right
,分别从数组的两端开始。
left
指向数组的负数部分的最后一个元素。right
指向数组的非负数部分的第一个元素。- 通过比较
left
和right
位置的平方值,选择较小的平方值放入结果数组。- 移动相应的指针,继续比较,直到遍历完数组。
处理特殊情况:
- 全部负数: 如果数组的所有元素都是负数,则从数组的末尾开始平方并填充到结果数组中。
- 全部非负数: 如果数组的所有元素都是非负数,则直接平方并填充结果数组。
时间复杂度:
- 由于我们只遍历了一次数组,且每次操作是常数时间,因此时间复杂度是 O(n),其中
n
是数组nums
的长度。空间复杂度:
- 我们需要额外创建一个数组
ans
用来存储平方后的结果,空间复杂度是 O(n)。
代码1
class Solution {public int[] sortedSquares(int[] nums) {// 特殊情况:数组只有一个元素if (nums.length == 1) {nums[0] *= nums[0]; // 直接平方并返回return nums;}// 创建一个新的数组用来存储平方后的结果int[] ans = new int[nums.length];// 初始化指针,left 指向负数部分的最后一个元素,right 指向非负数部分的第一个元素int left = 0, right = 0, middle = 0;// 查找第一个非负数的位置(即 0 或大于 0 的元素)for (int i = 0; i < nums.length; i++) {if (nums[i] >= 0) {right = i; // 记录非负数部分的起始位置middle = right; left = middle - 1; // left 右移一位break; // 找到非负数部分后停止}}int index = 0; // 用于向结果数组中插入元素// 如果左侧部分全是负数(左指针位于数组开头)if (left == middle) {left = nums.length - 1;// 逆向插入负数平方到结果数组中for (int i = left; i >= 0; i--) {ans[index++] = nums[i] * nums[i];}return ans;}// 如果右侧部分全是正数if (middle == 0) {// 直接将平方后的正数按顺序放入结果数组中for (int i = 0; i < nums.length; i++) {ans[i] = nums[i] * nums[i];}return ans;}// 双指针法:从两端开始比较while (left >= 0 && right < nums.length) {// 比较绝对值较小的数字,放入结果数组if (nums[left] * nums[left] < nums[right] * nums[right]) {ans[index++] = nums[right] * nums[right++]; // 右边的数字平方} else {ans[index++] = nums[left] * nums[left--]; // 左边的数字平方}}// 处理剩余的元素:如果左边的数字没有遍历完if (left < 0 && right < nums.length) {for (int i = index; i < nums.length; i++) {ans[i] = nums[right] * nums[right++]; // 右边剩余元素的平方}}// 如果右边的数字没有遍历完else if (left >= 0 && right >= nums.length) {for (int i = left; i >= 0; i--) {ans[index++] = nums[i] * nums[i]; // 左边剩余元素的平方}}return ans; // 返回排序后的平方数组}
}
提示:可从最左边和最右边比较最大值,然后反向放入数组中,会很好多
相关文章:
leetcode——移除数组
26.删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素…...
vue项目部署到github pages后页面显示不出来??
问题: 当我们在命令行执行 npm run build 后,项目的目录下会生成一个 dist 文件夹,它里面又包含一个 static 文件夹和一个 index.html 文件,这是 webpack 最终打包好的文件 项目上传到仓库后发现页面为空,找不到文件路…...
为什么爱用低秩矩阵
目录 为什么爱用低秩矩阵 一、定义与性质 二、区别与例子 为什么爱用低秩矩阵 我们更多地提及低秩分解而非满秩分解,主要是因为低秩分解在数据压缩、噪声去除、模型简化和特征提取等方面具有显著的优势。而满秩分解虽然能够保持数据的完整性,但在实际应用中的场景较为有限…...
如何在MySQL中计算两个日期的间隔天数
目录 1. DATEDIFF函数2. TIMESTAMPDIFF函数3. PERIOD_DIFF函数4. 函数对比 在MySQL 5.7中,计算两个日期之间的间隔天数是一项常见的任务。 1. DATEDIFF函数 DATEDIFF函数可以直接计算两个日期之间的天数差异。 -- 计算2024年1月1日和2024年1月10日之间的天数差异 …...
SQL面试题——抖音SQL面试题 共同问题—共同使用ip用户检测问题
共同使用ip用户检测问题 现有用户登录日志表,记录了每个用户登录的IP地址,请查询共同使用过3个及以上IP的用户对; +---+--------------+-------------------+ | id| ip| etime| +---+--------------+-------------------+ | 2|223.104.41.101|20…...
python学习笔记2
下载安装PyCharm 打开pycharm官网: https://www.jetbrains.com.cn/en-us/pycharm/download/?sectionwindows 找到社区版(免费) 下载之后打开,不停下一步就行 打开pycharm软件后,新建py文件 基本输出:…...
IS-IS的原理
IS-IS的基本概念: 概述: IS-IS,中间系统到中间系统,是ISO国际标准化组织为它的无连接网络协议设计的一种动态路由协议 IS-IS支持CLNP网络和IP网络,采用数据链路层封装,区别于ospf只支持IP网络࿰…...
现代应用程序中基于 Cell 架构的安全防护之道
在飞速发展的软件开发领域,基于 Cell 的架构日益流行起来。其概念源自船舶舱壁的设计准则,即单独的水密舱室能允许故障孤立存在。通过将这个概念应用于软件,我们创建了一个架构,将应用程序划分为离散的、可管理的组件,…...
Rust : 生成日历管理markdown文件的小工具
需求: 拟生成以下markdown管理小工具,这也是我日常工作日程表。 可以输入任意时间段,运行后就可以生成以上的markdown文件。 一、toml [package] name "rust-workfile" version "0.1.0" edition "2021"[d…...
Burp Suite 全面解析:开启你的 Web 安全测试之旅
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...
RocketMQ: 消息积压问题的解决
概述 1 ) 什么是消息积压 在分布式消息系统中,消息积压是指消息生产速度超过消息消费速度,导致未处理的消息在消息队列中累积的现象这种现象可能会导致系统性能下降、资源占用增加,甚至影响系统的正常运行 2 )消息积…...
Qt的定时器应用案例 || Qt的图片添加显示
目录 1.ui界面 2.头文件 3.cpp源文件 4.main文件 5.关于ui_mytimerevent.h的代码编译错误 6.图片的添加展示方式 7.结果展示 8.参考文章 1.ui界面 2.头文件 #ifndef MYTIMEREVENT_H #define MYTIMEREVENT_H#include <QMainWindow> #include <QTime> //#in…...
24.12.02 Element
import { createApp } from vue // 引入elementPlus js库 css库 import ElementPlus from element-plus import element-plus/dist/index.css //中文语言包 import zhCn from element-plus/es/locale/lang/zh-cn //图标库 import * as ElementPlusIconsVue from element-plus/i…...
web安全攻防入门教程
Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻…...
Android——android相对布局(RelativeLayout)及各属性
参考:Android——android相对布局(RelativeLayout)及属性 - 艺言弈行 - 博客园 (cnblogs.com)...
初窥 HTTP 缓存
引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…...
【LeetCode】3. 哈希表: 字母异位词分组;有效的数独
题目 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“…...
设计模式之抽象工厂 C# 范例
在设计模式中,抽象工厂模式(Abstract Factory Pattern) 是一种创建型模式,它提供一个接口,用于创建一组相关或相互依赖的对象,而无需指定具体类。这种模式的关键在于通过抽象工厂来封装产品的创建ÿ…...
基于Python的猎聘网招聘数据采集与可视化分析
1.1项目简介 在现代社会,招聘市场的竞争日趋激烈,企业和求职者都希望能够更有效地找到合适的机会与人才。猎聘网作为国内领先的人力资源服务平台,汇聚了大量的招聘信息和求职者数据,为研究招聘市场趋势提供了丰富的素材。基于Pyt…...
oracle数据库的启动与关闭
一.oracle数据库的启动过程 启动实例(Start the Instance) 启动实例:一个Oracle数据库实例由内存结构和后台进程组成,启动实例时会加载这些内存结构和启动进程。实例是数据库的一个运行时环境,它包含了数据库的控制文…...
openGauss开源数据库实战十六
文章目录 任务十六 openGauss逻辑结构:触发器管理任务目标实施步骤一、测试openGauss的触发器1.创建测试表2.创建触发器对应的函数3.创建触发器4.测试触发器 二、触发器的类型1.行级触发器2.语句级触发器3.AFTER触发器和 BEFORE触发器 任务十六 openGauss逻辑结构:触发器管理 …...
智能教育的关键之一是构建智能学习系统
教育部办公厅12月27日发布《关于加强中小学人工智能教育的通知》,提出人工智能教育六大主要任务和举措,包括构建系统化课程体系、实施常态化教学与评价、开发普适化教学资源、建设泛在化教学环境、推动规模化教师供给和组织多样化交流活动。《通知》提出…...
【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程
文章目录 【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程前言一 、docker上部署mysql1. 拉取mysql镜像2. 创建容器3. 远程登录mysql 二 、docker上部署nginx1. 拉取nginx镜像2. 在dockerTar目录下 上传nginx.tar rz命令3. 创建nginx容器4…...
十四(AJAX)、AJAX、axios、常用请求方法(GET POST...)、HTTP协议、接口文档、form-serialize
1. AJAX介绍及axios基本使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport" content&q…...
雪花算法生成ID
下面将简单介绍雪花算法的简单应用和在web应用中的使用。 雪花算法的组成:雪花算法是由64位组成:符号位(1)、时间戳(41)、机器码(5[数据中心]5[机器ID])、计数器(12) 对于雪花算法的源码可以在这里看:bwmarrin/snowflake: A simple to use …...
Java - JSR223规范解读_在JVM上实现多语言支持
文章目录 1. 概述2. 核心目标3. 支持的脚本语言4. 主要接口5. 脚本引擎的使用执行JavaScript脚本执行groovy脚本1. Groovy简介2. Groovy脚本示例3. 如何在Java中集成 Groovy4. 集成注意事项 6. 与Java集成7. 常见应用场景8. 优缺点9. 总结 1. 概述 JSR223(Java Spe…...
vue3 基本使用
Vue 3 提供了多种方式来构建用户界面,包括选项式 API 和 Composition API。下面我将详细介绍 Vue 3 的基本使用和语法,主要集中在选项式 API 上,因为这对于初学者来说更容易上手。 1. 创建 Vue 项目 如果你还没有一个 Vue 项目,…...
Redis自学之路—高级特性(实现消息队列)(七)
目录 简介 Redis的Key和Value的数据结构组织 全局哈希表 渐进式rehash 发布和订阅 操作命令 publish 发布消息 subscribe 订阅消息 psubscribe订阅频道 unsubscribe 取消订阅一个或多个频道 punsubscribe 取消订阅一个或多个模式 查询订阅情况-查看活跃的频道 查询…...
ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本)
ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) code review! 参考笔记 1.ROS基本框架1——编写简单的发布者和订阅者(C++和Python版本) 2.ROS基本框架2——在ROS开发中创建并使用自定义消息(C++版本) 文章目录 ROS基本框架2——在ROS开发中创建并使用自定义…...
计算机的错误计算(一百七十二)
摘要 探讨 MATLAB 对于算式 的计算误差。 例1. 在 MATLAB 中计算 的值。 直接贴图吧: 这样,MATLAB 的输出中只有3位正确数字,有效数字的错误率为 (16-3)/16 81.25% . 因为16位的正确输出为 0.2971242332737277e-18(ISReals…...
贵州大学oj平台高级语言第九次作业(四)
题目:链表的基础操作 题目描述 链表是软件中一种最基本的数据结构,它是用链式存储结构实现数据存储的线性表。它较顺序表(如数组)而言在插入和删除数据时不必移动其后的大批量元素。现在给你一些整数,然后会频繁地插入和删除其中的某些元素&a…...
手机卡限速丨中国移动5G变3G,网速500kb
以下猜测错误,又有新的猜测:河南移动的卡出省限速。可能是因为流量结算。 “2024年7月1日起,中国移动集团内部将开启跨省流量结算” 在深圳四五年了,之前没有过,就从上个月开始。11月底解除限速,12月刚开…...
种花问题算法
假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flowerbed 表示花坛,由若干 0 和 1 组成,其中 0 …...
Node.js-Mongodb数据库
MongoDB MongoDB是什么? MongoDB是一个基于分布式文件存储的数据库 数据库是什么? 数据库(DataBase)是按照数据结构来组织、存储和管理数据的应用程序(软件) 数据库作用? 对数据进行增、删…...
Nginx
目录 基本介绍 Nginx核心功能 Nginx下载&安装&启动 配置防火墙 Nginx常用命令 Nginx配置文件 全局块 events块 http块 http全局块 server 块 检查配置信息 快速入门 安装JDK 安装Tomcat 反向代理分析 Location语法规则 反向代理配置-Location实例 …...
CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(没思路了)
通过网盘分享的文件:如果能重来.zip 链接: https://pan.baidu.com/s/1XKIJx32nWVcSpKiWFQGpYA?pwd1111 提取码: 1111 --来自百度网盘超级会员v2的分享漏洞分析 格式化字符串漏洞,在printf(format); __int64 sub_13D7() {char format[56]; // [rsp10h] [rbp-40h]…...
HTML5系列(7)-- Web Storage 实战指南
前端技术探索系列:HTML5 Web Storage 实战指南 🗄️ 致读者:本地存储的新纪元 👋 前端开发者们, 今天我们将深入探讨 HTML5 中的 Web Storage 技术,这是一个强大的本地存储解决方案,让我们能…...
RocketMQ: 保证消息的可靠性投递
概述 在分布式系统中,消息队列作为异步通信的重要组件,其可靠性和稳定性至关重要RocketMQ 是阿里巴巴开源的一款高性能、高可靠性的分布式消息中间件,广泛应用于各种场景,如交易订单处理、日志收集、流计算等 RocketMQ 的可靠性…...
消息传递神经网络(Message Passing Neural Networks, MPNN)
消息传递神经网络(Message Passing Neural Networks, MPNN) 一、引言二、消息传递框架概述1.消息传递阶段(1)消息生成与传播-message(2)消息聚合-aggregate(3)消息更新-update&#…...
Python干货总结篇:列表、字典、集合、元组的区别与用途
前言: 更详细知识点,搞懂列表、字典、集合、元组到底是什么,可关注主页文章:Python知识点精汇! 目录 一、特点与用途 1.列表:a[ ] 2.集合:a{ } 3.字典:a{key:value} 4.元组&am…...
vue.js学习(day 18)
实例:面经基础版...
【Gitlab】CICD使用minio作为分布式缓存
1、安装minio 下载适合自己系统版本的安装文件https://dl.min.io/server/minio/release/windows-amd64/ yum install xxx.rpm 2、配置/etc/profile export MINIO_ACCESS_KEYroot [ui登录账号] export MINIO_SECRET_KEYminioDev001 [ui登录密码] export MINIO_OPTS"…...
医院管理系统
私信我获取源码和万字论文,制作不易,感谢点赞支持。 医院管理系统 摘要 随着信息互联网信息的飞速发展,医院也在创建着属于自己的管理系统。本文介绍了医院管理系统的开发全过程。通过分析企业对于医院管理系统的需求,创建了一个计…...
编译器优化技术
方法内联 逃逸分析 公共子表达式消除 数据边界检查消除...
高斯消元——acwing
题目一:高斯消元解线性方程组 883. 高斯消元解线性方程组 - AcWing题库 分析 代码 #include<bits/stdc.h> using namespace std;const int N 110; const double eps 1e-6; // 注意了double, 和1e-6 ,,这样才是double的0 int n;double a[N][N];int guass…...
华为关键词覆盖应用市场ASO优化覆盖技巧
在我国的消费者群体当中,华为的品牌形象较高,且产品质量过硬,因此用户基数也大。与此同时,随着影响力的增大,华为不断向外扩张,也逐渐成为了海外市场的香饽饽。作为开发者和运营者,我们要认识到…...
[代码随想录06]哈希表的使用,有效字母异位词,两数组交集,快乐数,两数之和
前言 哈希表是什么?一句话带你理解,简单来说我们对于杂乱的数据,怎么快速找到数据,如何做呢?一般的做法就是遍历复杂度为o(N)去找寻一个数据,但是吧,我们这样思考的话,还是花了大量时…...
linux网络抓包工具
linux网络抓包工具 一、tcpdump1.1 基本用法1.2 龙芯平台实例操作 二、wireshark2.1 主要功能2.2 龙芯平台实例操作 一、tcpdump tcpdump 指令可列出经过指定网络界面的数据包文件头,可以将网络中传送的数据包的 “头” 完全截获下来提供分析。它支持针对网络层、协…...
运维工程师.云计算工程师面试题.考试题
《(全国)运维自动化阶段第1套卷》 卷面总分 题号 单选题 90 题分 得分 一、单选题(每题2分,共计70分;得分____) 1. 下面哪个选项可以做变量名称?( ) A、if B、123abc C、for D、User_Name 2. 哪种数据类型可以做增,删,改相关操作?( ) A、字符串 B、列表 C、元…...
递归1——递归入门
目录 1.递归 2.递归的基本题目 2.1.题目一——P5739 【深基7.例7】计算阶乘 - 洛谷 | 计算机科学教育新生态 2.2.题目二——B2064 斐波那契数列 - 洛谷 | 计算机科学教育新生态 2.3.题目三——B2142 求 123...N 的值 - 洛谷 | 计算机科学教育新生态 2.4.题目四——B2144…...