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

太逼真!这个韩国虚拟女团你追不追?

“她们看上去太像真人了”&#xff0c; 韩国虚拟女团MAVE的首支MV和打歌舞台引发网友阵阵惊呼。现在&#xff0c;她们的舞蹈已经有真人在挑战了。 这一组虚拟人的“逼真”倒不在脸&#xff0c;主要是MAVE女团的舞台动作接近自然&#xff0c;不放近景看&#xff0c;基本可以达到…...

安全与道路测试:自动驾驶系统安全性探究

随着自动驾驶技术的迅速发展&#xff0c;如何确保自动驾驶系统的安全性已成为业界关注的焦点。本文将探讨自动驾驶系统的潜在风险、安全设计原则和道路测试要求。 潜在风险 自动驾驶系统在改善交通安全和提高出行效率方面具有巨大潜力&#xff0c;但其安全性仍面临许多挑战&a…...

chatGPT学英语,真香!!!

文章目录学习目标学习内容目标方式过程学习时间学习产出学习目标 能够在三个月的练习后&#xff0c;和真人外教比较流畅的沟通&#xff01; 最近chatGPT实在是太火了&#xff0c;各种事情都能干&#xff0c;能改论文、写代码和翻译。 看到B站很多教程教我们直接用chatGPT进行…...

12 Cache Memory

内存的层次结构 计算机内存的层级结构是一种将不同类型的存储设备按照速度、容量和访问时间组织起来的方式。这种层级结构提高了计算机的性能&#xff0c;使得处理器能够高效地访问数据。通常&#xff0c;内存层级结构可分为以下几个层次&#xff1a; 寄存器&#xff1a;寄存器…...

【CSS系列】第一章 · CSS基础

写在前面 Hello大家好&#xff0c; 我是【麟-小白】&#xff0c;一位软件工程专业的学生&#xff0c;喜好计算机知识。希望大家能够一起学习进步呀&#xff01;本人是一名在读大学生&#xff0c;专业水平有限&#xff0c;如发现错误或不足之处&#xff0c;请多多指正&#xff0…...

【Java代码审计】表达式注入

1 前置知识 1.1 EL表达式 EL表达式主要功能&#xff1a; 获取数据&#xff1a;可以从JSP四大作用域中获取数据执行运算&#xff1a;执行一些关系运算&#xff0c;逻辑运算&#xff0c;算术运算获取web开发常用对象&#xff1a;通过内置 的11个隐式对象获取想要的数据调用jav…...

Python-GEE遥感云大数据分析、管理与可视化

Python-GEE遥感云大数据分析、管理与可视化近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出…...

信息学奥赛一本通 1375:骑马修栅栏(fence) | 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences

【题目链接】 ybt 1375&#xff1a;骑马修栅栏(fence) 洛谷 P2731 [USACO3.3]骑马修栅栏 Riding the Fences 【题目考点】 1. 图论&#xff1a;欧拉回路 欧拉回路存在的条件&#xff1a;图中所有顶点的度都是偶数欧拉路径存在的条件&#xff1a;图中只有两个度为奇数的顶点…...

Spring Boot 应用的打包和发布

1. 创建项目&#xff08;example-fast&#xff09; 基于 Spring Boot 创建一个 WEB 项目 example-fast。 2. 编译打包 2.1 采用 IDEA 集成的 Maven 环境来对 Spring Boot 项目编译打包&#xff0c;可谓是超级 easy 2.2 mvn 命令打包 # mvn clean 清理编译 # install 打包 #…...

linux:iptables (3) 命令行操练(一)

目录 1.命令行手册查缺补漏 2.开始练习,从最陌生的参数练习开启 2.1 --list-rules -S &#xff1a;打印链或所有链中的规则 2.2 --zero -Z 链或所有链中的零计数器 2.3 --policy -P 修改默认链的默认规则 2.4 --new -N 接下来练习添加和删除自定义链 1.命令行手册查缺补…...