代码随想录算法训练营42期第一章part01

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

数组理论基础

文章链接

代码随想录

数组是存放在连续内存空间上的相同类型数据的集合。

  • 数组下标都是从0开始的。
  • 数组内存空间的地址是连续的

因为数组内存空间地址连续,所以在删除或者增添元素的时候,就难免要移动其他元素的地址。但是删除的时候,只能是覆盖来代替。

二维数组在内存的空间地址也是连续的

704. 二分查找

题目链接:力扣题目链接

文章讲解:代码随想录

27. 移除元素

题目链接:力扣题目链接

关于二分查找,之前在代码随想录刷过一遍,隐约记得左闭右闭,左闭右开,两种方式。

当左闭右闭时,while(left<=right) 这时if判断的时候,注意右值的写法。

if(nums[middle]>target)的时候,此时nums[middle]一定不是target,所以将right==middle-1

当左闭右开时,while(left<right)

if(nums[middle]>target),此时是左闭右开,将right==middle

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

移除元素直接上手双指针,之前也做过,双指针确实挺牛

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int slow = 0;
        for (int fast = 0; fast < nums.size(); fast++) {
            if (val != nums[fast]) {
                nums[slow] = nums[fast];
                slow++
            }
        }
        return slow;
    }
};
// 时间复杂度:O(n)
// 空间复杂度:O(1)

12027.linux flash驱动之IS25LP01G/IS25WWP01G 一页:512字节 --> 扇区 4096字节 --> 块 32k,64k, 层层递进关系。 阅读详情

相关推荐

MONAI教程<1>-安装

MONAI的安装非常简单,常用的有两种方法: 直接 pip install monai 从GitHub 上安装 monai是通常配合其他库一起使用的,比如pytorch, nibabel, skimage, pillow等等。缺什么直接pip install 就行

Tina姐的博客 1万+

代码随想录算法训练营Day 42| 动态规划part04 | 01背包问题理论基础I、01背包问题理论基础II、416. 分割等和子集

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

m0_51759998的博客 545

python 识别滑块验证码

博客来源于: https://www.cnblogs.com/wyh0923/p/16528354.html # -*- coding: utf-8 -*- # https://gov.pkulaw.cn/ 1. import io 2. import json 3. from pathlib import Path 4. from PIL import Image 5. import bas...

2102

代码随想录算法训练42 | 动态规划part04_背包问题1

正式开始背包问题,背包问题还是挺难的,虽然大家可能看了很多背包问题模板代码,感觉挺简单,但基本理解的都不够深入。如果做过背包类问题,可以先看视频,很多内容,是自己平时没有考虑到位的。如果是直接从来没听过背包问题,可以先看文字讲解慢慢了解 这是干什么的。背包问题,力扣上没有原题,大家先了解理论,今天就安排一道具体题目。416. 分割等和子集。本题是 01背包的应用类题目。

Hello__Word___的博客 504

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

idea 编译打包nacos2.0.3源码,生成可执行jar 包常见问题

fyihdg的专栏 1218

别再只看成交量了!用通达信这个VOL监测公式,一眼识别主力吸筹与出货信号

本文详细介绍了通达信VOL监测公式的实战应用,通过彩色量柱和换手率分层技术,帮助投资者识别主力吸筹与出货信号。该公式结合动态量能标准化和多周期均线组合,提供可视化主力行为图谱,提升交易决策的准确性。

weixin_28693447的博客 662

代码随想录算法训练营 Day41 | 单调栈 part01

单调栈的本质是维护一个等待队列。栈里存的是“还在苦苦等待更高温度的日子”。当你遇到一个温度很高的日子时,它不仅能解决自己的问题,还能顺手把前面那些比它冷的日子的问题一次性全部解决(while循环的作用),这就避免了每个日子都去往后傻傻遍历。每日温度:存索引i。因为要算距离(本题:存数值nums2[i]。因为不需要算距离,只需要知道“下一个更大的值是谁”,拿数值直接去哈希表里查更方便。单调栈的作用:栈中保存的是还没找到下一个更大元素的索引。并且栈内索引对应的元素值是单调递减的(从栈底到栈顶)。

2401_86818319的博客 412

Qt C++ 实现一个完整的扫雷

mineCountLabel = new QLabel(QString("地雷: %1").arg(remainingMines, 3, 10, QChar('0')), this);mineCountLabel->setText(QString("地雷: %1").arg(remainingMines, 3, 10, QChar('0')));timeLabel->setText(QString("时间: %1").arg(gameTime, 3, 10, QChar('0')));" : "游戏失败!

寒寒豆豆软件公司的博客 107

【代码随想录训练营第42期 Day36打卡 - 动态规划Part4 - LeetCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

动态规划--01背包的使用

记得要努力变强 1482

STM32 IIC温湿度传感器(STH45)实验

精度 ΔRH = ±1.0 %RH, ΔT = ±0.1 °C• 平均电流:0.4 μA,空闲电流:80 nA• I2C FM、CRC 校验和、乘法。I2C 地址。• 专利保护选项 [1]、PTFE 膜和可拆卸保护盖• 工作范围:0 …100 %相对湿度,−40…125 摄氏度• 在冷凝环境中功能齐全• 动力加热器,真正的NIST可追溯性• JEDEC JESD47 认证 • 符合 ISO 17025 : 2017 的传感器专用校准证书,3 点温度校准。

baidu_34971492的博客 3072

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【代码随想录训练营第42期 Day31打卡 贪心Part5 - LeetCode 56. 合并区间 738.单调递增的数字 968.监控二叉树

贪心--合并区间,二叉树

记得要努力变强 1470

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

代码随想录算法训练营第3天 |第二章 链表part01

问题的描述如下:N个人围成一圈,从第一个人开始报数,报到第M个数字的人出列,然后从出列的下一个人开始重新报数,重复这个过程,直到剩下最后一个人。问题的目标通常是找到最后剩下的那个人的位置。设 f(n) 表示 n 个人中最后剩下的人的位置,如果我们知道了 f(n-1),则可以计算 f(n)。初始条件是 f(1) = 0,因为在只有一个人时,这个人就是最后剩下的人。删除后的节点让然留存再内存里,知识不在这个链表里,所以在C++中最好手动释放这个节点,从而释放内存。这个问题可以用递归或数学的方法求解。

qq_43750923的博客 259

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

代码随想录算法训练营第42天|动态规划part01| 理论基础、 509. 斐波那契数、 70. 爬楼梯、 746. 使用最小花费爬楼梯

这体现出确定dp数组以及。

gengjiahao的博客 126

代码随想录算法训练营第42天 | 动态规划 part04 ● 背包问题二维● 背包问题&滚动数组 一维 ● 416. 分割等和子集

二维01背包:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]) 一维01背包:只能物品外层,j=bagweight;j>=weight[i];j-- 416. 分割等和子集:正好装满sum/2, nums[i] 同时是weight和value

weixin_51674457的博客 510

代码随想录训练营day42:动态规划part04:01背包

【代码】代码随想录训练营day42:动态规划part04:01背包。

qq_45789731的博客 184

代码随想录算法训练营第四十九天 | 单调栈part02

利用单调栈寻找每一个元素右边比它大的元素,同时在单调栈中的下一个元素就是在它左边比它大的第一个元素,此时便形成了凹槽。每一个元素向左找到第一个比它小的元素,向右找到第一个比它小的元素。

qq_43456971的博客 327

代码随想录算法训练营DAY42|C++动态规划Part4|0-1背包理论基础(一)、0-1背包理论基础之滚动数组(二)、416.分割等和子集

通过块中的文字,我们就可以知道,本题是不能先遍历背包容量,再遍历物品的,因为在二维世界中,这种遍历方法是从上到下的,本格子的值依赖上一层左上角的值,这样我们在一维数组中无法保存上一层的状态。之前谈到我们本质上还是在遍历一个二维数组,只不过我们在不停得对其进行更新,如果从小到大遍历,我们就会覆盖掉上一层的值,导致之前状态的丢失!那么整个集合的和除以2,其实就是每个子集合的和。还记得我们在[再论01背包的遍历顺序](# 再论01背包的遍历顺序)讨论的遍历顺序吗,我们发现一个很关键的点,那就是本次状态(第。

糖炒栗子 1108

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 228

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 316

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 592

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 22

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 750

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 371

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 412

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 172
下一篇: 代码随想录算法训练营42期第一章数组part02
xpZM
博客等级 码龄6年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值