当前位置: 首页 > news >正文

算法练习随记(三)

1.全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]
输出:[[1]]

我的解法(回溯)

class Solution {public List<List<Integer>> permute(int[] nums) {Arrays.sort(nums);List<List<Integer>> res = new ArrayList<>();// 记录已经被选过的元素boolean[] used = new boolean[nums.length];backtracing(nums, used, res, new ArrayDeque<Integer>());return res;}public void backtracing(int[] nums, boolean[] used, List<List<Integer>> res, Deque<Integer> path){if(path.size() == nums.length){res.add(new ArrayList<>(path));return;}for(int i = 0; i < nums.length; ++i){if(used[i] == true) continue;used[i] = true;path.add(nums[i]);backtracing(nums, used, res, path);path.removeLast();used[i] = false;}}
}

2.子集

给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

示例 1:

输入:nums = [1,2,3]
输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

我的解法(回溯)

class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> res = new ArrayList<>();backtracking(nums, 0, res, new ArrayDeque<Integer>());return res;}public void backtracking(int[] nums, int startIndex, List<List<Integer>> res, Deque<Integer> path){res.add(new ArrayList<>(path));for(int i = startIndex; i < nums.length; ++i){path.add(nums[i]);backtracking(nums, i + 1, res, path);path.removeLast();}}
}

3.根据身高重建队列

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。

请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。

示例 1:

输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]
输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]解释:
编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。
编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。
编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 01 的人。
编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0123 的人。
编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。

示例 2:

输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]
输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]

我的解法(贪心)

class Solution {public int[][] reconstructQueue(int[][] people) {Arrays.sort(people, (a, b) -> {if(a[0] == b[0]) return a[1] - b[1];return b[0] - a[0];});LinkedList<int[]> res = new LinkedList<>();for(int[] p : people){res.add(p[1], p);}return res.toArray(new int[people.length][]);}
}

4.盛最多水的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

示例 1:
在这里插入图片描述

输入:[1,8,6,2,5,4,8,3,7]
输出:49 

解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

输入:height = [1,1]
输出:1

我的解法(暴力破解)

class Solution {public int maxArea(int[] height) {int max = 0;for(int i = 0; i < height.length; ++i){for(int j = height.length - 1; j >= 0; --j){max = Math.max(max, (j - i) * Math.min(height[i], height[j]));}}return max;}
}

一做算法题脑子就跟浆糊一样,两眼一瞪,啥也不会,暴力破解还超时,没有天理啊。

官方解法(双指针)

class Solution {public int maxArea(int[] height) {int res = 0, i = 0, j = height.length - 1;while(i < j){res = height[i] < height[j] ? Math.max(res, (j - i) * height[i++]):Math.max(res, (j - i) * height[j--]);}return res;}
}

没有思路时,一定要仔细分析,如果实在想不出来就动笔画画图。

相关文章:

算法练习随记(三)

1.全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2&#xff1a; 输入&#x…...

基于Python 进行卫星图像多种指数分析

一、前言本文帮助读者更好地了解卫星数据以及使用 Python 探索和分析哨兵2卫星数号数据在Sundarbans地区的不同方法。二、Sundarbans研究区孙德尔本斯&#xff08;Sundarbans&#xff09;是恒河、雅鲁藏布江和梅克纳河在孟加拉湾汇合形成的三角洲中最大的红树林区之一。 孙德尔…...

(Week 15)综合复习(C++,字符串,数学)

文章目录T1 [Daimayuan]删删&#xff08;C&#xff0c;字符串&#xff09;输入格式输出格式样例输入样例输出数据规模解题思路T2 [Daimayuan]快快变大&#xff08;C&#xff0c;区间DP&#xff09;输入格式输出格式样例输入样例输出数据规模解题思路T3 [Daimayuan]饿饿 饭饭2&a…...

迪赛智慧数——柱状图(正负条形图):“光棍”排行榜TOP10省份

效果图 中国单身男女最多的省份是广东&#xff0c;广东的人口是全国最多的。人口多了&#xff0c;单身的人也会多&#xff0c;单身女性324万&#xff0c;男性498万。全国第二的省份是四川省&#xff0c;单身女性256万&#xff0c;单身男性296万。 数据源&#xff1a;静态数据…...

IDEA集成chatGTP让你编码如虎添翼

第一步,打开您的IDEA, 打开首选项(Preference) -> 插件(Plugin) 在插件市场搜索 chatGPT, 点击安装 安装完毕后会提示您重启IDE, 重启IDEA. 重启后您会发现窗口,右边条上 竖着挂着个chatGPT按钮了。 第二步、配置APIkey或accessToken(二选一,推荐accessToken无费用…...

Python3 os.close() 方法、Python3 File readline() 方法

Python3 os.close() 方法 概述 os.close() 方法用于关闭指定的文件描述符 fd。 语法 close()方法语法格式如下&#xff1a; os.close(fd);参数 fd -- 文件描述符。 返回值 该方法没有返回值。 实例 以下实例演示了 close() 方法的使用&#xff1a; #!/usr/bin/python3…...

Vision Pro 自己写的一些自定义工具(c#)

目录前言一、保存图片工具1、展示2、源码下载地址二、3D图片格式转化1、展示2、源码下载地址三、所有工具汇总下载地址前言 自己用c#写的一些visionPro自定义工具&#xff0c;便于使用的时候直接拿出来&#xff0c;后续会不断添加新的工具。 想看怎么使用c#写visionPro自定义…...

ARM/FPGA/DSP板卡选型大全,总有一款适合您

创龙科技ARM/FPGA/DSP嵌入式板卡选型大全2023.2版本正式发布!接下来,跟着我们一起看看有哪些亮点吧! 6大主流工业处理器原厂 创龙科技现有30多条产品线,覆盖工业自动化、能源电力、仪器仪表、通信、医疗、安防等工业领域,与6大主流工业处理器原厂强强联合,包括德州仪器…...

【C语言蓝桥杯每日一题】—— 既约分数

【C语言蓝桥杯每日一题】—— 既约分数&#x1f60e;前言&#x1f64c;既约分数&#x1f64c;递归版解题代码&#xff1a;&#x1f60d;非递归版解题代码&#xff1a;&#x1f60d;总结撒花&#x1f49e;既约分数&#x1f60e;)&#x1f60e;博客昵称&#xff1a;博客小梦 &…...

【机器学习】线性回归

文章目录前言一、单变量线性回归1.导入必要的库2.读取数据3.绘制散点图4.划分数据5.定义模型函数6.定义损失函数7.求权重向量w7.1 梯度下降函数7.2 最小二乘法8.训练模型9.绘制预测曲线10.试试正则化11.绘制预测曲线12.试试sklearn库二、多变量线性回归1.导入库2.读取数据3.划分…...

用ChatGPT学习多传感器融合中的基础知识

困惑与解答&#xff1a; 问题&#xff1a;匈牙利算法中的增广矩阵路径是什么意思 解答&#xff1a; 匈牙利算法是解决二分图最大匹配的经典算法之一。其中的增广矩阵路径指的是在当前匹配下&#xff0c;从一个未匹配节点开始&#xff0c;沿着交替路&#xff08;交替路是指依次…...

PyCharm2020介绍

PyCharm2020PyCharm2020安装过程PyCharm2020安装包1、PyCharm2020介绍2、PyCharm2020特点3、PyCharm2020特点4、PyCharm2020PyCharm2020安装过程 PyCharm2020安装过程安装步骤点击此链接。 PyCharm2020安装包 链接&#xff1a;https://pan.baidu.com/s/19R3nJx6wMyNBU9oY4N4n…...

Le Potato + Jumbospot MMDVM热点盒子

最近才留意到&#xff0c;树莓派受到编程圈一定瞩目之后&#xff0c;智慧的同胞早已悄咪咪的搞了一堆xx派出来&#xff0c;本来对于香橙派&#xff0c;苹果派&#xff0c;土豆派和香蕉派是不感冒的&#xff0c;但是因为最近树莓派夸张的二级市场价格和断供&#xff0c;终于还是…...

蓝桥杯第19天(Python)(疯狂刷题第2天)

题型&#xff1a; 1.思维题/杂题&#xff1a;数学公式&#xff0c;分析题意&#xff0c;找规律 2.BFS/DFS&#xff1a;广搜&#xff08;递归实现&#xff09;&#xff0c;深搜&#xff08;deque实现&#xff09; 3.简单数论&#xff1a;模&#xff0c;素数&#xff08;只需要…...

(五)手把手带你搭建精美简洁的个人时间管理网站—基于Axure的首页原型设计

&#x1f31f;所属专栏&#xff1a;献给榕榕&#x1f414;作者简介&#xff1a;rchjr——五带信管菜只因一枚 &#x1f62e;前言&#xff1a;该专栏系为女友准备的&#xff0c;里面会不定时发一些讨好她的技术作品&#xff0c;感兴趣的小伙伴可以关注一下~&#x1f449;文章简介…...

阿里面试:为什么MySQL不建议使用delete删除数据?

MySQL是一种关系型数据库管理系统&#xff0c;它的数据存储是基于磁盘上的文件系统实现的。MySQL将数据存储在表中&#xff0c;每个表由一系列的行和列组成。每一行表示一个记录&#xff0c;每一列表示一个字段。表的结构由其列名、数据类型、索引等信息组成。 MySQL的数据存储…...

低代码开发公司:用科技强力开启产业分工新时代!

实现办公自动化&#xff0c;是不少企业的共同追求。低代码开发公司会遵循时代发展规律&#xff0c;注入强劲的科技新生力量&#xff0c;在低代码开发市场厚积爆发、努力奋斗&#xff0c;推动企业数字化转型升级&#xff0c;为每一个企业的办公自动化升级创新贡献应有的力量。 一…...

参考mfa官方文档实践笔记(亲测)

按顺序执行以下指令&#xff1a; conda create -n aligner -c conda-forge montreal-forced-alignerconda config --add channels conda-forgeconda activate alignerconda install pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia 如果报错&#xff1…...

【 第六章 拦截器,注解配置springMVC,springMVC执行流程】

第六章 拦截器&#xff0c;注解配置springMVC&#xff0c;springMVC执行流程 1.拦截器&#xff1a; ①springMVC中的拦截器用于拦截控制器方法的执行。 ②springMVC的拦截器需要实现HandlerInterceptor或者继承HandlerInterceptorAdapter类。 ③springMVC的拦截器必须在spring…...

一种编译器视角下的python性能优化

“Life is short&#xff0c;You need python”&#xff01;老码农很喜欢python的优雅&#xff0c;然而&#xff0c;在生产环境中&#xff0c;Python这样的没有优先考虑性能构建优化的动态语言特性可能是危险的&#xff0c;因此&#xff0c;流行的高性能库如TensorFlow 或PyTor…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...