当前位置:首页 > 机动车 >

leetcode总结(leetcode算法题库及答案)

来源:原点资讯(www.yd166.com)时间:2023-11-03 11:42:38作者:YD166手机阅读>>

215数组中的第K个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 **k** 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

class Solution { public int findKthLargest(int[] nums, int k) { int start=0,end=nums.length-1,index = nums.length-k; while(start < end){ int pivot = partition(nums,start,end); if(pivot < index){ start = pivot 1; }else if(pivot > index){ end = pivot -1; }else{ return nums[pivot]; } } return nums[start]; } private int partition(int[] nums,int start,int end){ int pivot=start,temp; while(start <= end){ while(start <= end && nums[start] <= nums[pivot]){ start ; } while(start <= end && nums[end] > nums[pivot]){ end--; } if(start>end)break; temp = nums[start]; nums[start] = nums[end]; nums[end] = temp; } temp = nums[end]; nums[end] = nums[pivot]; nums[pivot] = temp; return end; } }134.加油站

在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。

你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i 1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。

如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。

public int canCompleteCircuit(int[] gas, int[] cost) { int tank = 0; for(int i = 0;i<gas.length;i ){ tank = gas[i] -cost[i]; } if(tank < 0){ return -1; } int start = 0; int accumulate = 0; for(int i = 0;i<gas.length;i ){ int curGain = gas[i] -cost[i]; if(accumulate curGain < 0){ start = i 1; accumulate = 0; }else{ accumulate = curGain; } } return start; }871.最低加油次数

思路

每驶过一个加油站,记住这个加油站有多少油。不需要立即决定要不要在这个加油站加油,如果后面有油量更多的加油站显然优先选择后面的加油。

如果当前油量不够抵达下一个加油站,必须得从之前的加油站中找一个来加油,贪心选择最大油量储备的加油站就好了。

算法

定义 pq(优先队列)为一个保存了驶过加油站油量的最大堆,定义当前油量为 tank。

如果当前油量为负数(意味着当前油量不够抵达当前位置),那就必须在驶过的加油站找一个油量储备最大来加油。

如果在某个位置油量为负,且没有加油站可用了,那就不可能完成这个任务。

class Solution { public int minRefuelStops(int target, int tank, int[][] stations) { // pq is a maxheap of gas station capacities PriorityQueue<Integer> pq = new PriorityQueue(Collections.reverseOrder()); int ans = 0, prev = 0; for (int[] station: stations) { int location = station[0]; int capacity = station[1]; tank -= location - prev; while (!pq.isEmpty() && tank < 0) { // must refuel in past tank = pq.poll(); ans ; } if (tank < 0) return -1; pq.offer(capacity); prev = location; } // Repeat body for station = (target, inf) { tank -= target - prev; while (!pq.isEmpty() && tank < 0) { tank = pq.poll(); ans ; } if (tank < 0) return -1; } return ans; } }

栏目热文

leetcode万能解法(leetcode编程技巧)

leetcode万能解法(leetcode编程技巧)

在这个系列的博客中,我们根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,从简单到...

2023-11-03 11:03:21查看全文 >>

leetcode递归深度解析(如何使用leedcode科学学习算法)

leetcode递归深度解析(如何使用leedcode科学学习算法)

前期提要:链表反转是高频考点,在各大高频题排名网站长期占领前三,在牛客网稳居第一。链表反转之所以很重要,是因为它在实际编...

2023-11-03 10:59:02查看全文 >>

leetcode算法常用技巧(leetcode算法新手怎么刷题)

leetcode算法常用技巧(leetcode算法新手怎么刷题)

在这个系列的博客中,我们根据LeetCode官方给出的每个题目的出现频率,整理并收录了每个类别里高频出现的题目,从简单到...

2023-11-03 11:12:34查看全文 >>

leetcode算法每日一练(leetcode基础算法题100篇)

leetcode算法每日一练(leetcode基础算法题100篇)

给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:...

2023-11-03 11:31:54查看全文 >>

leetcode编程步骤(leet code使用教程)

leetcode编程步骤(leet code使用教程)

张晓雅 投稿自 凹非寺量子位 | 公众号 QbitAI还在自己吭哧吭哧打算法平台Leetcode的周赛?为什么不试试神奇...

2023-11-03 11:39:03查看全文 >>

leetcode中最长有效的括号(leetcode正确用法)

leetcode中最长有效的括号(leetcode正确用法)

Longest Valid Parentheses问题简介:给定一个只包含字符 ‘(’ 和 ‘)’ 的字符串,找到最长的...

2023-11-03 11:17:53查看全文 >>

leetcode需要什么基础

leetcode需要什么基础

作为程序员立身之根本,算法更是面试必不可少的环节。像 Google、Facebook、Apple、NVIDIA等等这些硅...

2023-11-03 11:04:46查看全文 >>

leetcode最佳解法(leetcode简单算法)

leetcode最佳解法(leetcode简单算法)

工作面试可能是一项对人生非常重要,却又没有什么系统指导的任务。大部分人不得不做,又不知道如何做好。自我介绍、面试题库、项...

2023-11-03 11:44:01查看全文 >>

leetcode分析(leetcode说明什么)

leetcode分析(leetcode说明什么)

给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长...

2023-11-03 10:58:52查看全文 >>

leetcode深度解题思路(leetcode发展过程)

leetcode深度解题思路(leetcode发展过程)

本文经AI新媒体量子位(公众号ID:qbitai)授权转载,转载请联系出处。本文约多图,建议阅读5分钟。本文为你分享中文...

2023-11-03 11:44:28查看全文 >>

文档排行