LeetCode 11 - 盛最多水的容器

思路

容器面积由 宽度短板高度 决定。最优解一定藏在不断收窄宽度的过程中。

  1. 初始化left 指针在数组头部,right 指针在尾部。这是最宽的可能。
  2. 移动策略:比较 height[left]height[right]
    • 面积受限于短板。若移动长板,宽度变小,高度不变(或变小),面积必然减小。
    • 因此,必须移动短板对应的指针。这虽然牺牲了宽度,但给了我们寻找更高板子的机会,面积才有可能增大。
  3. 迭代:循环此过程,持续更新最大面积,直到两指针相遇。
C++ 代码实现
classSolution{public:intmaxArea(vector<int>& height){int left =0;int right = height.size()-1;int maxArea =0;while(left < right){int currentArea =min(height[left], height[right])*(right - left); maxArea =max(maxArea, currentArea);if(height[left]< height[right]){ left++;}else{ right--;}}return maxArea;}};
复杂度
  • 时间复杂度: O(n)leftright 指针总共只会遍历数组一次。
  • 空间复杂度: O(1),仅使用常数个变量。

Read more

.net Core Web 保姆级教学 逐文件讲解 从0搭建一个 ASP.NET Core Razor Pages

我们可以把整个项目比喻成一家餐厅的运作体系。 第一步:先看项目结构(以默认模板为例) 当你通过 Visual Studio 或 dotnet new webapp 命令创建一个新项目后,会看到类似下面的文件夹和文件(不同版本可能略有差异,但核心一致): 你的项目名称/ │ ├── 📁 Properties/ │ └── launchSettings.json (配置文件:启动按钮的设置) │ ├── 📁 wwwroot/ (餐厅的"公共用餐区":存放浏览器能直接访问的静态文件) │ ├── 📁 css/ (样式文件 - 餐厅的装修风格) │ ├── 📁 js/ (JavaScript文件 - 服务员的现场互动) │ └── 📁 lib/ (第三方库 - 比如借来的桌椅餐具) │ ├── 📁 Pages/ (餐厅的"核心包间区":所有网页都在这里) │ ├── 📁 Shared/ (公共组件:每个包间都有的墙壁、菜单样式) │ │ └── _Layout.

By Ne0inhk
【从零开始学数据结构①】:顺序表

【从零开始学数据结构①】:顺序表

学完c语言的基础语法,我们便要开始数据结构的学习,那么什么是数据结构呢,听我给你一一道来吧! 一.数据结构 1.什么是数据结构? 定义:数据结构是计算机存储、组织数据的方式。 2.为什么要使用数据结构? 在前面几章中我们学习到了数组这一概念,用下标来管理数据,但是你有没有想过,如果数据量过大,仅用数组便于管理和使用吗? 显然有些吃力了,那么这里便是为什么使用数据结构的原因了,以结构的形式进行数据管理。 二.顺序表 1.线性表 在了解顺序表前先让大家了解一下线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中广泛使⽤的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。 2.顺序表的定义 顺序表是一种线性表的顺序存储结构,底层结构为数组,

By Ne0inhk
[算法]——链表(三)

[算法]——链表(三)

目录 编辑 一、前言 二、正文 1.重排链表 1.1 题目解析 1.2 算法原理 1.3 具体代码 2.K个一组翻转链表 2.1 题目解析 2.2 算法原理 2.3 具体代码 三、结语 一、前言         本文将继续为大家带来链表的学习!!! 二、正文 1.重排链表 1. 重排链表 - [力扣] 1.1 题目解析         本题要求要求我们对所给链表进行重排,那么观察题目所给示例,我们会发现所谓重排后的链表,就是先头结点,尾结点,然后头结点的下一个节点,

By Ne0inhk
【数据结构指南】深入二叉树遍历

【数据结构指南】深入二叉树遍历

前言:         在前文中,我们探讨了完全二叉树和满二叉树的概念与性质,并基于完全二叉树实现了堆这一数据结构。然而,对于普通二叉树的认识仍有待深入,本文将系统性地介绍普通二叉树的遍历相关内容。                   一、前置说明          一般而言,对于一棵普通二叉树是通过链式结构定义,即每个节点包含三个部分:          1.数据域(data):用于存储节点的值          2.左指针(left):用于指向左子节点          3.右指针(right):用于指向右子节点                  typedef int BTDataType;//此处将 (int)整形 作为节点存储的内容 typedef struct BinaryTree { BTDataType data; struct BinaryTree* left; struct BinaryTree* right; }BTNode;                  在学习二叉树的基本操作前,需先要先创建一棵二叉树,然后才能学习

By Ne0inhk