剑指offer算法总结
专题1:链表 学链表,我们需要掌握什么? 链表在面试中出现频率排行前2的算法题,因为链表题的特点是:描述非常简单,基本不用花时间去读题,在面试有些的三四十分钟里,链表非常受欢迎。 我们先来说一说学习链表时,我们最需要掌握的是什么? 首先我认为大部分的链表题,解法思路都相对简单,双指针占一半以上,但是上了战场,写链表题的时候,非常容易出错,常见错误是: 1、没有考虑节点为 null 导致空指针异常。 2、容易出现节点位置定位出错,比如往前多走了一步,或者少走了一步。 所以我觉得,做链表题,最重要的就是要掌握: 1、规定好自己的模版,比如我习惯自己弄一个辅助头节点,确定下来之后,就一直这么做,不要变来变去。 2、做的时候,多考虑一步,就是在用 .next...
MySQL-Preliminary-Note
MySQL初步笔记——[TOC] 本文将详细介绍 MySQL 及其常用的 SQL 基础操作,从数据库、数据表的创建与管理,到增删改查的基本语句,以及常见的约束与函数使用。适合对数据库基础尚不熟悉的初学者阅读。 什么是 MySQLMySQL 是一种关系型数据库管理系统(RDBMS),广泛应用于各类应用程序和网站。其特点包括: 开源、免费:社区版本可免费使用,且有丰富的插件与扩展支持。 跨平台:支持多种操作系统(如 Linux、Windows、macOS)。 性能优异:读写速度快,支持多线程。 广泛的社区支持:学习资源丰富,遇到问题易于寻找解决方案。 基础概念在开始实际操作之前,需要理解一些基础概念: 数据库(Database):数据的集合。可以将其类比为一个文件夹,里面装着各种表格(表)。 数据表(Table):数据存放的结构化表格,每张表由行(记录)和列(字段)组成。 记录(Row):表中的一行数据。 字段(Column):表中的一列,用来描述数据的属性。 主键(Primary Key):唯一标识表中每条记录的列或列的组合。 外键(Foreign...
LeetCodeCompetitionRecord
第426场周赛Q1. 仅含置位位的最小整数3370. 仅含置位位的最小整数 给你一个正整数 n。返回 大于等于 n 且二进制表示仅包含 置位 位的 最小 整数 x 。置位 位指的是二进制表示中值为 1 的位。 示例 1: 输入: n = 5 输出: 7 解释: 7 的二进制表示是 "111"。 示例 2: 输入: n = 10 输出: 15 解释: 15 的二进制表示是 "1111"。 示例 3: 输入: n = 3 输出: 3 解释: 3 的二进制表示是 "11"。 提示: 1 <= n <= 1000 解法: 思路: 简单的“位运算”题目,将num中的所有数位变为1即可 12345678910111213class Solution {public: int smallestNumber(int num) { int res=0; int cnt=0; while(num){ ...
SomeInterviewsThinking
千万级系统,每天有大约1万个用户登录,如何进行性能优化?针对千万级系统每天约1万用户登录的性能优化,可以从以下几个方面着手: 使用分布式架构,将系统拆分成多个服务,提高并发处理能力 采用缓存技术如Redis,减少数据库查询压力 优化数据库索引,SQL查询等,提高查询效率 异步处理耗时任务,快速响应请求 增加服务器数量,负载均衡分担压力 对热点数据进行缓存预热,降低响应时间 对代码进行性能分析优化,找出瓶颈 限流、降级等措施应对流量高峰 监控系统性能指标,及时发现和处理问题 定期进行压力测试,评估系统承载能力 关键是分析系统瓶颈,有针对性地优化,同时构建高可用架构,以应对高并发场景。持续的监控和优化也很重要。 spring cloud与sprint boot的区别Spring Boot是用于快速构建独立的、生产级的Spring应用程序的框架。它提供了自动配置、嵌入式服务器等便利功能。 Spring Cloud是基于Spring Boot的微服务框架。它提供了服务发现、配置管理、断路器、智能路由等一系列用于构建分布式系统的工具。 总的来说,Spring...
StrangeInterviewQuestion
实现一个随机算法,要求每次返回1-100中的一个数,每次都不重复,每个数返回的几率均等,并且每次只能使用一次random函数。这是一个非常好的面试题。以下是我的解答: 实现思路: 初始化一个大小为100的数组,用于存储1-100的数字。 使用Fisher-Yates洗牌算法对数组进行随机打乱。该算法能够保证每个数字被等概率地放置在任意位置。 维护一个指针,初始指向数组的第一个元素。每次调用函数时,返回指针所指的元素,并将指针向后移动一位。 当指针移动到数组末尾时,重新对数组进行洗牌,并将指针重置为数组起始位置。 具体实现代码: 12345678910111213141516171819202122232425262728293031323334353637383940414243#include <iostream>#include <vector>#include <random>#include <algorithm>class RandomNumber {private: ...
SortAlgorithm排序算法
十大经典排序算法介绍与实现(Java/C++)引言排序算法是计算机科学与工程中最基础也最重要的算法之一。一个优秀的程序员必须深刻理解各种排序算法的原理、实现、优劣与应用场景。本文将详细介绍十种经典排序算法,并给出Java与C++的代码实现,旨在为读者全面梳理排序算法,夯实算法基本功。 1. 冒泡排序(Bubble Sort)1.1 算法原理冒泡排序重复遍历要排序的数列,每次比较两个元素,如果顺序错误就把它们交换过来。遍历数列的工作重复地进行,直到没有再需要交换,也就是说该数列已经排序完成。 1.2 Java实现123456789101112public void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { int temp...
C++toJava,For algorithmPractice
C++刷题者快速入门Java指南引言本文旨在帮助有C++刷题经验的程序员快速适应Java编程环境,尤其是在Leetcode等算法编程网站上从事题目练习。文章将对比C++和Java在基本语法、数据结构实现等方面的异同,帮助读者尽快掌握Java刷题技巧。 基本语法对比变量声明 C++可以使用auto关键字进行类型推导,而Java需要显式声明变量类型。 Java变量声明时可以直接初始化,如int x = 1;C++须分开声明与定义。 输入输出 C++使用cin/cout进行标准输入输出,Java则使用System.in/System.out。 Java输入输出操作需要显式抛出异常,而C++无此要求。 字符串 Java内置String类,C++使用string。 Java字符串不可变,C++字符串可变。 Java字符串重载+运算符以实现拼接,C++需调用成员函数。 常见数据结构实现对比Vector / ArrayList C++: #include <vector> Java: import...
单调栈-MonotoneStack
单调栈引用链接: LeetCode算法通关手册-单调栈 Oi-wiki-单调栈 单调栈是一种数据结构,通常用于解决某些与数组或序列中的顺序相关的问题。它主要用于保持一个栈中的元素以单调递增或单调递减的顺序,因此被称为“单调栈”。单调栈特别适合解决需要在一个数组中寻找与每个元素有关的下一个更大(或更小)元素的问题,典型例子包括 “下一个更大元素”、”下一个更小元素” 等。 何为单调栈?顾名思义,单调栈即满足单调性的栈结构。与单调队列相比,其只在一端进行进出。 为了描述方便,以下举例及伪代码以维护一个整数的单调递增栈为例。 过程 插入 将一个元素插入单调栈时,为了维护栈的单调性,需要在保证将该元素插入到栈顶后整个栈满足单调性的前提下弹出最少的元素。 例如,栈中自顶向下的元素为 。 插入元素 时为了保证单调性需要依次弹出元素 ,操作后栈变为 。 用伪代码描述如下: 1234insert xwhile !sta.empty() && sta.top()<x ...
并查集Union-Find-algorithm
当然!并查集(Union-Find)是一种用于处理动态连通性问题的数据结构。它通常用来处理像网络连通性、集合合并等问题。并查集操作高效,尤其适用于需要频繁进行合并和查询的情景,具有接近常数时间复杂度。 以下是对并查集的详细解释,包括它的基本概念、实现步骤,以及C++代码示例。 1.并查集的基本概念并查集的主要功能有两个: 查找(Find):确定某个元素属于哪个集合。 合并(Union):将两个元素所在的集合合并为一个集合。 并查集通常通过树结构实现,每个元素都指向它的父节点,通过这种方式可以追溯到树的根节点。 父节点(Parent):并查集中每个元素有一个指向其父节点的指针。 根节点(Root):在并查集中,一个集合可以看作是一棵树的形式,根节点是整个树的代表元素。 优化策略为了提高并查集操作的效率,通常会使用以下两个重要的优化技巧: 路径压缩(Path Compression):在执行查找操作时,将访问的节点直接连接到根节点,以减少树的深度。 按秩合并(Union by Rank 或 Union by...
HexoWriteGuide
hexo官方文档 butterfly帮助文档 butterfly官方文档 Hexo介绍Hexo 是一个基于 Node.js 的快速、简洁且高效的静态博客框架,常被用来搭建个人博客或技术博客。以下是对 Hexo 的简单介绍: 核心特点 静态站点生成: Hexo 可以将 Markdown 文件转换为静态的 HTML 页面,这些页面可以直接部署到静态文件托管服务(如 GitHub Pages、Netlify)。 速度快: Hexo 使用 Node.js 提供高效性能,支持快速生成成千上万篇文章的静态文件。 支持 Markdown: 使用简单且流行的 Markdown 语法撰写文章,提升写作效率。 主题丰富: Hexo 社区提供了大量主题,可以通过配置文件快速切换,满足不同用户的个性化需求。 插件生态: Hexo 拥有丰富的插件库,可扩展功能如 SEO 优化、RSS 支持、站点地图生成等。 支持多种部署方式: 内置一键部署到 GitHub Pages、GitLab Pages 或其他静态文件托管服务。 Hexo 的基本工作流程 安装 Hexo: 使用 npm 安装...