算法系列题目

回文数系列题目(经典算法) NYOJ 回文串系列题目 acm 阅读详情

一. 下一个更大元素

1. 下一个更大元素 Ⅰ

添加链接描述
在这里插入图片描述

2. 下一个较大元素II

在这里插入图片描述
添加链接描述

  • 思路分析
    维护单调递减的主栈(用来取结果,题目要求最小,因此是单调递减)和单调递增(跟主栈反过来)的辅助栈
    题目要求的是在当前元素后面比它大,且是最小的那个元素,因此相当于后边的元素要一直用,且排好序,因此想到用一个栈接住弹出的元素,再将其添加到原来的栈中
    为了处理后边的元素排序,因此需要从后边开始遍历
    当主栈不满足单调递减时,弹出元素,且用辅助栈保存结果
import java.util.*;

public class NextElement {
    public int[] findNext(int[] A, int n) {
        int[] res = new int[n];
        Stack<Integer> stack = new Stack<>();//主栈
        Stack<Integer> stack2 = new Stack<>();//辅助栈
        for (int i = n - 1; i >= 0; i--) {
            while (!stack.isEmpty() && stack.peek() <= A[i]) {//保证单调递减
                stack2.push(stack.pop());//用辅助栈保留结果,
            }
            res[i] = stack.isEmpty() ? -1 : stack.peek();//单调递减的栈顶元素为所求
            stack.push(A[i]);//入栈
            while (!stack2.isEmpty()) {//其余元素也需要回到栈
                stack.push(stack2.pop());
            }
        }
        return res;
    }
}

二. 区间问题

1. 贪心策略

最少射箭问题

板子题,排序后,比较后一个元素的左边界和前一个元素的右边界,无重叠+1,出现重叠就更新右边界

无重叠区间

前一题的变形,反过来求结果,区别在于边界相等时的处理不一样

合并区间

前几题的变形,left和right记录最新边界

class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->(a[0]-b[0]));
        int left = intervals[0][0];
        int right = intervals[0][1];
        LinkedList<int[]> res = new LinkedList<>();
        for(int i=1;i<intervals.length;i++){
            if(intervals[i][0]>intervals[i-1][1]){
                res.add(new int[]{left,right});
                left = intervals[i][0];
                right = intervals[i][1];
            }else{
                intervals[i][1] = Math.max(intervals[i][1],intervals[i-1][1]);
                right = Math.max(intervals[i][1],intervals[i-1][1]);
            }
        }
        res.add(new int[]{left,right});
        return res.toArray(new int[res.size()][2]);
    }
}

划分字母区间

记录每个字母最大索引,当i==最大索引,则满足条件

2. 差分数组

三. 设计类题目

1. LRU(最近最少使用)缓存

添加链接描述

  • Node类:包含key,value,prev和next指针
  • DoubleLinkedList类:双向链表,初始化head和tail相连,head表示最近使用,内含添加节点到头部,删除节点,返回最后一个节点三个方法
  • size记录大小
  • HashMap来缓存值 key:Node
  • 双向链表类来维护最近使用
  • get方法:从缓存中拿,拿不到返回空;拿到的话,更新双向链表中的节点,返回值
  • put方法:先判断是否存在,若存在,更新值和链表;若不存在,判断容量大小,若到达容量大小,删除尾部的元素(链表和hashmap),加入新节点

2. LFU(最不经常使用)缓存

添加链接描述

  • Node类和DoubleLinkedList类,size同前面
  • HashMap保存值,key:Node
  • 另一个HashMap 保存 频率和链表,freq:DoubleLinkedList。说白了就是给每个频率开一个双向链表
  • 开一个遍历minFreq记录最小频率
  • get方法:不存在返回空;存在,更新频率,返回值
  • 更新频率:先找到原来的链表,删除节点;需要判断是否更新最小频率(非常容易漏);更新新的频率,查找是否已存在对应链表,若不存在,创建;存在,加入头节点
  • put方法:判断是否存在,存在,更新值和频率;不存在,判断容量,如果到达容量大小,删除频率最小的最不经常使用的;未达到容量大小,创建节点,放入cache缓存和链表,此时最小频率必然为1,更新最小频率

四. 括号类

算法笔记-位运算/进制转换/计算器系列题目 不同进制数的表示形式 二进制:0b 八进制:0 十六进制:0x int a = 0b001; int b = 07; int c = 0xa; cout << a << endl; // 1 cout << b << endl; // 7 cout << c << endl; // 10 计算机中对数字的表示方法 相关概念 原码:数值绝对值二进制表示+1位符号位(即最高位正数为0,负数为1) 补码:正数补码=原码; 阅读详情

相关推荐

编程挑战:POPSTAR系列算法题目解析

数据结构是算法实现的基础。在编程竞赛中,掌握数组、链表和树等常用数据结构至关重要。数组(Array)是一种线性表数据结构,它用连续的内存空间来存储一系列相同类型的元素。数组的优势在于其空间的连续性,这使得数组支持高效的随机访问,时间复杂度为O(1)。但其劣势在于插入和删除操作的时间复杂度较高,平均为O(n),因为这需要移动数组中的元素以保持连续性。// C语言中创建数组的示例链表(LinkedList)是由一系列节点组成的数据结构,每个节点包含数据部分和指向下一个节点的指针。

weixin_35835030的博客 1011

算法题目 股票交易系列

目录只能进行一次的股票交易可以进行无限次的股票交易只能进行两次的股票交易可以进行K次的股票交易需要冷冻期的股票交易需要交易费用的股票交易 只能进行一次的股票交易 leetcode 121 买卖股票的最佳时机(简单) 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票...

coding 3127

解决Anaconda环境下catkin_make编译报错:Python路径冲突与empy模块缺失

本文详细分析了在Anaconda环境下使用catkin_make编译时出现的Python路径冲突与empy模块缺失问题,提供了快速解决方案和永久性环境配置方法。通过显式指定Python解释器路径或调整Anaconda配置,有效解决编译报错问题,适用于ROS开发与科学计算并行的场景。

weixin_28829629的博客 353

算法题目各种常见系列

注意 这些系列就像follow up一样,有的时候虽然题目相似 但是做法完全不同 linkedlist系列:各种反转找环判断起点 two sum/three sum/four sum系列 subset系列(排列组合系列二) stocking系列 coin change系列 arrange meeting系列 矩阵旋转系列 数学题系列(各种溢出 边界问题) 树的pre/in/post/level order的各种简单变形:zigzag,利用其中两种还原树,复制树等等 ...

Tech in Pieces 372

网工实验笔记:SNMP的配置

简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。

2301_76170756的博客 2116

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2284

算法学习系列3——实战算法题目解析

算法学习系列3——实战算法题目解析 算法学习系列3——算法题目:移动零题目练习算法学习系列3——实战算法题目解析前言移动零思路解法 前言 算法学习系列3——实战算法题目解析 题目: 移动零题目练习 移动零 题干:给定一个数组nums,编写一个函数将所有的0移动到数组的末尾,同时保证非零元素的相对顺序; 示例: 输入: [0, 1, 0, 3, 12] 输出: [1, 3, 12, 0, 0] 思路解法 loop 循环查找0的个数,非零元素前移,0后移; 声明一个新数组,i从头部记录数组下标,

kuibisi的博客 244

C# 实现文件和字符串的AES加密解密

C# 实现文件和字符串的AES128加密解密

m0_72044573的博客 5935

跳跃游戏系列题目【动态规划&贪心算法&DFS&BFS】

文章目录Leetcode 55. 跳跃游戏问题描述解题报告动态规划贪心算法实现代码动态规划实现贪心算法实现Leetcode 45. 跳跃游戏 II问题描述解题报告动态规划贪心算法实现代码动态规划实现贪心算法实现Leetcode 1306. 跳跃游戏 III问题描述解题报告实现代码Leetcode 1345. 跳跃游戏 IV问题描述解题报告实现代码Leetcode 1340. 跳跃游戏 V问题描述解题报告实现代码参考资料 Leetcode 55. 跳跃游戏 问题描述 给定一个非负整数数组,你最初位于数组的第一

MD 1996

从‘数字分身’到‘数字员工’:华为云MetaStudio如何重塑企业生产力?

本文探讨了华为云MetaStudio如何通过数字人技术重塑企业生产力,从数字分身到数字员工的转变。通过多模态AIGC技术,MetaStudio在金融、零售和制造业等多个行业实现高效应用,显著提升服务质量和运营效率。数字员工不仅降低成本,更成为企业增长的新引擎。

weixin_29083475的博客 450

HFSS仿真的后处理结果,如何根据天线表面的电流密度分布对天线进行优化?

在HFSS仿真中,天线表面的Jsurf​是最直观、最有价值的诊断工具之一。它不仅告诉你天线“能不能工作”,还能告诉你“为什么工作”以及“哪里出了问题”。

degogmy的博客 1158

借助Leetcode 热门题目学习C++系列——原地算法

通俗地说,就是求解问题只在原数据结构上进行,基本不需要额外的空间进行处理,输出之前会对输入的数据结构内容进行修改。答案是,会引入新的本不该为0的元素,我想,最后的结局就是,整个矩阵都变成了0。同时,不做任何记录会使在对某一行(或一列)做置零时将矩阵原来的0元素位置信息丢失,导致置零处理出现遗漏。的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。连续存储:vector 中的元素在内存中是连续存储的,这使得访问元素非常快速。当算法执行时,输入的资料通常会被要输出的部份覆盖掉。

m0_74552520的博客 1124

【STM32项目】老人健康跌倒检测系统实现(附教程PCB资料)

功能概述 跌倒检测 倾倒告警,人体角度倾斜至阈值触发蜂鸣报警 异常运动,加速度超过正常行动阈值时触发报警 心率监测 实时检测心率数据 血氧监测 实时检测采集血氧 血压测量 血压在线测量 红外体温 非接触体温采集方案 接触式体温采集方案 实时定位 中科微GPSGT-U12双频GPS北斗 GLONASS IRNSS定位系统 NEMA数据解析 可扩展高精度定位方案厘米级 屏幕显示 数据采集显示 告警阈值设置 语音提示 1欢迎使用老人智慧监测系统

洋洋的博客 1万+

python调用md系列算法破解ctf题目

题目 某银行客户端以安全著称,所有网络流量都开启了密码学防护机制。有一天,你抓到了局域网中的网银登录流量。在这个流量中,密码字段的值为 5ef5ce92fc409703a834adabd2bc861c 根据分析,你获得了如下的线索: 上面抓到的登录流量密码字段是 md系列哈希算法的哈希值。 这个登录密码也是银行卡的ATM取款密码。 登录密码的哈希值是加盐之后计算的结果,根据...

大哥一声吼 3158

初识 QML

QML 是一种声明性语言,允许根据用户界面的可视组件以及它们如何相互交互和相互关联来描述用户界面。QML 是一种高度可读的语言,旨在使组件能够以动态方式互连,并且允许组件在用户界面中轻松重复使用和自定义。 使用 Qt Quick,开发人员可以轻松地在 QML 中构建流体动画用户界面,并且可以选择将这些用户界面连接到任何后端 C++ 库。

青春不老,奋斗不止! 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

力扣算法题目(螺旋矩阵系列题目)

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

wlijun_0808的博客 181

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

算法面试_两数之和为S系列题目

题目1: 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等与s,则输出任意一对即可。 题目3: 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 思路: 使用map和vector进行一次遍历,时间复杂度为...

Rocky Ding相信人工智能、数据科学、商业逻辑、金融工具、终身成长以及顺应时代的潮流会赋予我们超能力。 472

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

算法系列之双指针(待完善题目)

一文学会双指针!!!加上思想和题目

m0_73359068的博客 839

算法学习打卡day47|单调栈系列题目

对于每个 0

weixin_45124219的博客 1366

代码随想录算法训练营第二十三天 | 额外题目系列

一开始没思路。想到二分法了,但是觉得二分法,无法处理有相同值的情况。

weixin_45690942的博客 3176

数据结构与算法——动态规划系列题目

一、最长回文子串 此题为leetcode第5题 思路:此题的“中心扩展法”在前面已经讲过,这里解释动态规划解法。设状态dp[i][j]的含义是在区间[i, j]的字符串是否为回文串。如果[i+1, j-1]区间内已经是回文串了,那么只要s[i] == s[j]那么[i, j]区间的字符串便是回文串。另外要主要内外循环的次序。一般是先循环i再循环j,但在这里会导致参考的状态还没有被计算出来。比如当下计算dp[i][j],会用到dp[i+1][j-1],由于先循环的i所以这个状态还没有被计算出来。因此要先循环j

贾维斯的小屋 546

【知识讲解-题目讲解】算法系列之动态规划入门(下)

【知识讲解-题目讲解】算法系列之动态规划入门(上)-优快云博客在上篇文章中,我们已经讲过关于动态规划的知识,这篇文章将通过更多的题目来深化我们在上篇文章中提到的“反向思考,正向实现接下来让我们来看看吧。let's go!!!!!!!!!Part1. 单词拆分先来看题目:139. 单词拆分 - 力扣(LeetCode)我们要得到n处的dp值,于是我们遍历从0到n,当dp[m]处的值为1时,我们就判断m到n处的字符是否为题目中给定的字符,如果是那就dp[n]=1,退出循环。

2501_93971468的博客 1249

【题目讲解】 算法系列之定长类滑动窗口解析(上)

滑动窗口作为经典的算法之一,他可以有效地简化遍历这个操作的时间复杂度。接下来,跟随小编的步伐来看看这个算法具体使用吧。let's go!!!!!!!!!滑动窗口本质上还是一个工具,主要就是帮我们解决在连续的条件下直接遍历的时间复杂度过高的场景。它可以大大简化时间复杂度,用一句话总结就是拆东墙补西墙”,保留之前花费时间得来的成果,改变需要改变的。int main();//定义变量;//初始化变量(将窗口展开);//看条件是否初始化全局类型的值while(){;//去除左边;//新增右边;

2501_93971468的博客 1156

贪心算法系列题目(一)

贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

weixin_62796124的博客 144

算法学习系列4——实战算法题目解析2020-09-06

算法学习系4——实战算法题目解析 算法学习系列4——实战算法题目解析算法学习系4——实战算法题目解析前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二

kuibisi的博客 274

题目1451:不容易系列之一(递推算法)

题目链接:http://ac.jobdu.com/problem.php?pid=1451 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: // // 1451 不容易系列之一.cpp // Jobdu // // Created by PengFei_Zheng on 24/04/2017. // Copy...

weixin_30680385的博客 142
上一篇: 大厂笔试真题解析
下一篇: [Git使用] 基础1
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值