TypechoJoeTheme

Toasobi的博客

最新文章

2023-10-11

充电桩与电动车(场景题:生产消费)

充电桩与电动车(场景题:生产消费)
题意如下:有两个充电速度不一样的充电桩,有几辆汽车过来充电,汽车的充电时间不等,请模拟该过程public class produceCoustomer { // 定义一个汽车类,包含汽车的编号和充电时间 class Car { private int id; // 汽车编号 private int chargeTime; // 充电时间,单位为秒 public Car(int id, int chargeTime) { this.id = id; this.chargeTime = chargeTime; } public int getId() { return id; } public int getChargeTime() { return chargeTime; } } // 定义一个充电桩类,实现Runna...
2023-10-11

技术文章

0 阅读
0 评论
2023年10月11日
0 阅读
0 评论
2023-10-03

每日温度(单调栈)

每日温度(单调栈)
题目:给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例 1:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]示例 2:输入: temperatures = [30,40,50,60]输出: [1,1,1,0]示例 3:输入: temperatures = [30,60,90]输出: [1,1,0]图解思路:点击此处跳转力扣图解代码如下:class Solution { public int[] dailyTemperatures(int[] temperatures) { int n = temperatures.length; int[] res = new int[n]; Stack<Integer> st = new Stack<>(); ...
2023-10-03

经典例题

0 阅读
0 评论
2023年10月03日
0 阅读
0 评论
2023-10-02

最大子序列的分数(优先队列)

最大子序列的分数(优先队列)
题目:给你两个下标从 0 开始的整数数组 nums1 和 nums2 ,两者长度都是 n ,再给你一个正整数 k 。你必须从 nums1 中选一个长度为 k 的 子序列 对应的下标。对于选择的下标 i0 ,i1 ,..., ik - 1 ,你的 分数 定义如下:nums1 中下标对应元素求和,乘以 nums2 中下标对应元素的 最小值 。用公式表示: (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] , nums2[i1], ... ,nums2[ik - 1]) 。请你返回 最大 可能的分数。一个数组的 子序列 下标是集合 {0, 1, ..., n-1} 中删除若干元素得到的剩余集合,也可以不删除任何元素。示例 1:输入:nums1 = [1,3,3,2], nums2 = [2,1,3,4], k = 3输出:12解释:四个可能的子序列分数为:选择下标 0 ,1 和 2 ,得到分数 (1+3+3) * min(2,1,3) = 7 。选择下标 0 ,1 和 3 ,得到分数 (1+3+2) * min(2,...
2023-10-02

经典例题

0 阅读
0 评论
2023年10月02日
0 阅读
0 评论
2023-09-27

寻找峰值(二分+爬坡)

寻找峰值(二分+爬坡)
题目:峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。示例 1:输入:nums = [1,2,3,1]输出:2解释:3 是峰值元素,你的函数应该返回其索引 2。示例 2:输入:nums = [1,2,1,3,5,6,4]输出:1 或 5 解释:你的函数可以返回索引 1,其峰值元素为 2; 或者返回索引 5, 其峰值元素为 6。 爬坡法,如果右边的元素大于本元素,那么有一个高处就一定在右边,即右边一定有一个峰值,小于则同理同时爬坡法的遍历,还可以使用二分法进行优化,从而达到O(log n)的时间复杂度注意!在while (left <= right)中还要mid - 1和mid + 1的操作,所以我们需要处理越界问题lass Solution { public int findPeakElement(int[] nums) { ...
2023-09-27

经典例题

0 阅读
0 评论
2023年09月27日
0 阅读
0 评论
2023-09-25

数组中第K个最大元素(快速选择/优先队列、堆)

数组中第K个最大元素(快速选择/优先队列、堆)
题目:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1:输入: [3,2,1,5,6,4], k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6], k = 4输出: 4方法一:优先队列、堆PriorityQueue(优先队列)使用(需要定义比较器)底层数据结构是完全二叉树(最小堆),队列顶元素永远是最小元素,同时每次poll是移除并返回队顶元素。优先队列每次删除和添加都会调整堆,使得堆的所有节点的值小于等于子节点的值import java.util.Comparator; import java.util.PriorityQueue; public class Solution { public int findKthLargest(int[] nums, int k) { int len = nums.length; // 使用一个含有 k ...
2023-09-25

经典例题

0 阅读
0 评论
2023年09月25日
0 阅读
0 评论