当前位置: 首页 > 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…...

百度网盘SVIP破解插件:macOS用户突破下载限速的终极指南

百度网盘SVIP破解插件&#xff1a;macOS用户突破下载限速的终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 百度网盘SVIP破解插件&#xff08;…...

LLMRank:基于大模型排序学习的自动化评估方案与实践指南

1. 项目概述&#xff1a;当大模型学会“自我评价”&#xff0c;我们该如何用好它&#xff1f; 最近在折腾大语言模型&#xff08;LLM&#xff09;应用落地的朋友&#xff0c;估计都绕不开一个核心问题&#xff1a; 怎么判断模型生成的内容到底好不好&#xff1f; 是通顺就行…...

构建多模型智能客服时如何借助 Taotoken 实现灵活路由与降级

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 构建多模型智能客服时如何借助 Taotoken 实现灵活路由与降级 在构建企业级智能客服系统时&#xff0c;服务的稳定性和响应能力至关…...

终极指南:如何使用FlicFlac快速完成Windows音频格式转换

终极指南&#xff1a;如何使用FlicFlac快速完成Windows音频格式转换 【免费下载链接】FlicFlac Tiny portable audio converter for Windows (WAV FLAC MP3 OGG APE M4A AAC) 项目地址: https://gitcode.com/gh_mirrors/fl/FlicFlac 在Windows平台上处理音频文件时&…...

如何用JavaScript解放双手:AutoJs6让Android自动化变得简单有趣

如何用JavaScript解放双手&#xff1a;AutoJs6让Android自动化变得简单有趣 【免费下载链接】AutoJs6 安卓平台 JavaScript 自动化工具 (Auto.js 二次开发项目) 项目地址: https://gitcode.com/gh_mirrors/au/AutoJs6 你是否厌倦了每天在手机上重复点击相同的按钮&#…...

Linux高手必备:从安全操作到高效运维的12个核心习惯

1. 为什么说“习惯”是Linux高手的护城河刚接触Linux那会儿&#xff0c;我总觉得高手和菜鸟的区别在于记住了多少命令、会不会写复杂的脚本。后来踩了无数坑、熬了无数夜、甚至搞崩过几次生产环境后&#xff0c;我才恍然大悟&#xff1a;真正的分水岭&#xff0c;其实藏在那些日…...

Linux系统功耗调优实战:从监控到内核级优化指南

1. 项目概述&#xff1a;为什么要在Linux上折腾功耗&#xff1f; 最近几年&#xff0c;我手头的服务器、开发板和笔记本越来越多&#xff0c;从24小时开机的家庭服务器&#xff0c;到需要长续航的移动开发环境&#xff0c;再到追求极致静音和低发热的桌面工作站&#xff0c;“电…...

2026实测:能耗管控场景下的AI工具数据分析能力横向对比,实在Agent如何通过ISSUT打破数据孤岛?

【摘要】 步入2026年&#xff0c;全球能源结构转型进入深水区。随着数据中心耗电量突破1000太瓦时&#xff08;TWh&#xff09;以及工业领域对“双碳”目标的刚性对标&#xff0c;能耗管控场景已成为企业运营的战略核心。然而&#xff0c;企业在推进自动化能效管理时&#xff0…...

DLSS Swapper终极指南:一键切换游戏超采样版本,免费提升帧率30%+

DLSS Swapper终极指南&#xff1a;一键切换游戏超采样版本&#xff0c;免费提升帧率30% 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper 你是否曾羡慕别人在《赛博朋克2077》里享受丝滑流畅的画面&#xff0c;而你的游戏…...

Swagger2Word终极指南:3种方法实现API文档自动化转换

Swagger2Word终极指南&#xff1a;3种方法实现API文档自动化转换 【免费下载链接】swagger2word 项目地址: https://gitcode.com/gh_mirrors/swa/swagger2word 还在为手动编写API文档而烦恼吗&#xff1f;Swagger2Word为你提供了一站式自动化解决方案&#xff0c;将Swa…...