TypechoJoeTheme
2023-10-11
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-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-09-27
2023-09-25
题目:给定整数数组 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 ...