
算法
爱学习的小菜鸡
每天进步一点点!
展开
-
设计-----146. LRU 缓存机制
146. LRU 缓存机制思路代码1:使用LinkedHashMap,保持插入顺序class LRUCache { private int cap; private Map<Integer, Integer> map = new LinkedHashMap<>(); public LRUCache(int capacity) { this.cap = capacity; } public .原创 2021-04-14 14:00:13 · 99 阅读 · 0 评论 -
2021/4/11 刷题记录+周赛记录
今天周赛就A了前面两个简单题,卡在第三题了,真是想复杂了;今日一题没想到用堆做。。。。菜呀第三题5728. 最少侧跳次数代码:dp[i][j]表示到达第i处第j跑道的最少跳跃次数class Solution { public int minSideJumps(int[] obstacles) { int len = obstacles.length; int[][] dp = new int[len][3]; for(int ..原创 2021-04-11 21:08:48 · 139 阅读 · 0 评论 -
动态规划小结
题目:115. 不同的子序列解决思路:动态规划dp方程表示的含义:s[i] 和t[j] 索引的元素子序列数量状态方程状态方程分析:当s[i] == t[j] 时 dp[i][j] = dp[i-1][j-1] + dp[i-1][j];当s[i] != t[j] 时 dp[i][j] = dp[i-1][j]先看s[i] == t[j] 时,以s = "rara" t = "ra" 为例,当i = 3, j = 1时,s[i] == t[j]。此时分为2种情况...原创 2021-04-10 11:13:39 · 113 阅读 · 0 评论 -
滑动窗口(解决LeetCode76、最小覆盖子串)
滑动窗口模板/* 滑动窗口算法框架 */void slidingWindow(string s, string t) { unordered_map<char, int> need, window; for (char c : t) need[c]++; int left = 0, right = 0; int valid = 0; while (right < s.size()) { // c 是将移入窗口的字符原创 2021-03-25 10:55:40 · 251 阅读 · 0 评论 -
二分查找(包括确定左边界和右边界)
最近在刷Leetcode,学算法推荐看一下labuladong:https://labuladong.gitee.io/algo/int binary_search(int[] nums, int target) { int left = 0, right = nums.length - 1; while(left <= right) { int mid = left + (right - left) / 2; if (nums[mid] &l.原创 2021-03-24 14:58:37 · 314 阅读 · 0 评论 -
牛客----寻找第K大(快速排序)
题目描述:有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。测试样例:[1,3,5,2,2],5,3返回:2思路:快排+二分法像快排一样,但是每次排完需要与k进行比较,具体比较看代码。1.由于一般排序是从小到大排的;所以注意这里比较的时候是 n-i 与 k进行比较;代码如下:class Finder {public: int findKth(vecto.原创 2020-09-16 16:36:57 · 333 阅读 · 0 评论 -
快速排序算法----C++(分治法)
是一种分治法,通过大问题划分为小问题该方法的基本思想是:1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。快排过程:选一个基准数(一般是第一个数),然后先从最后 j-- 开始,要是比基准数小就换到前面来 i++,然后再从前面开始往后移动,如果比基准数大就移动到后面去 j-- ,最后将中间的元素置换成为基准数,以此分为两个部分再进行递归快速排序。代码(递归)://快..原创 2020-09-16 16:21:28 · 1239 阅读 · 0 评论