算法
算法之路
edanhuang
知道的越多不知道的越多
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【每日一题】leetcode393.UTF-8 编码验证
393.UTF-8 编码验证模拟模拟主要思想就是根据字符的前置字节找到我们形成字符的位数,然后遍历后面字节是否合法即可完成。class Solution { public boolean validUtf8(int[] data) { int loc = 0; while(loc < data.length) { // 找到字符的字节数 int c = 0; for(int i =原创 2022-03-13 22:04:17 · 823 阅读 · 0 评论 -
【七种常见排序】常见的排序算法总结
昨天面试,面试官让我写归并排序,我知道逻辑怎么写,但是别人看着我写代码我就是不得劲,被面试官diss惨了,知道怎么写还写不出来不就是不行吗?惩罚自己把常见的排序算法全部捋清楚,也给大家总结分享下。原创 2022-03-02 18:35:51 · 295 阅读 · 0 评论 -
每日n刷:leetcode1725.可以形成最大正方形的矩形数目
1725. 可以形成最大正方形的矩形数目贪心贪心非常简单,先找到最大的正方形边长,再在数组中找到符合的长方形数量。class Solution { public int countGoodRectangles(int[][] rectangles) { int ml = 0; for(int [] rectangle : rectangles) { ml = Math.max(ml, Math.min(rectangle[0], re原创 2022-02-04 15:36:14 · 946 阅读 · 0 评论 -
斐波那契数求解:必会的三种求法
509. 斐波那契数递归 动态规划递归直接递归很简单,直接返回n的n - 1 + n - 2就行,这也是递归的本质,你只需要写出递归出口和递归条件,剩下的都是程序帮你完成。class Solution { public int fib(int n) { if(n < 2) return n; return fib(n - 1) + fib(n - 2); }}递归优化上面直接递归虽然代码很简单,但是会产生多余的重复计算,比如下图fib(原创 2022-02-04 11:47:43 · 380 阅读 · 0 评论 -
每日n刷:leetcode15. 三数之和
15. 三数之和双指针双指针关键点1:因为题目目标值为0,所以一定会出现几个数是非正数,利用这个性质,先固定一个值,然后去寻找两个值等于固定这个值的相反数就是所要的答案,利用双指针不断缩小范围另外两个数的范围即可求出答案。关键点2:题中要求不能出现重复的答案,那么我们需要先保证数组有序,在答案符合要求之后,下一个即将判断的数不能与当前数一致。class Solution { public List<List<Integer>> threeSum(int[] num原创 2022-01-31 00:04:33 · 992 阅读 · 0 评论 -
每日n刷:leetcode 2013. 检测正方形
2013. 检测正方形枚举枚举这题找的是正方形!一定要好好审题!不过已经做下去了就黑着脸做完吧!我当时做的时候先找到了矩形,提交用例不过debug才发现原来只要正方形,那么直接根据target对应的那个点的x,y值判断是否一样就可以,注意一下,需要取绝对值!!!class DetectSquares { // 坐标图 存储坐标对应的点数 int[][] map; public DetectSquares() { this.map = new int[1原创 2022-01-26 15:49:41 · 287 阅读 · 0 评论 -
每日n刷:leetcode3. 无重复字符的最长子串
3. 无重复字符的最长子串滑动窗口滑动窗口题目要求的是子串,所以一定是连续的,只要是连续的我们就要想到滑动窗口。这题要求拿到最长的不重复子串,我们只要维护滑动窗口中的内容是不重复的且满足长度最大。关注点:在冲突时保证左边界是最大的,比如abba:b冲突后a也冲突,那么需要改变left为max(max, conflict(a).location)。记得边界要+1,因为冲突点也是包含冲突字符的。class Solution { public int lengthOfLongestSubs原创 2022-01-25 22:22:51 · 183 阅读 · 0 评论 -
每日n刷:leetcode704.二分查找
704. 二分查找二分查找二分查找二分没什么难的,主要在于循环条件和左右端点移动是+1、-1还是mid。这个根据题意判断,本题找是否存在target,那么nums[mid]已经判断过不是的话,就直接移到mid+1、-1就可以了。很轻松写出答案。class Solution { public int search(int[] nums, int tar) { int n = nums.length; int l = 0; int r = n -原创 2022-01-25 13:42:17 · 352 阅读 · 0 评论 -
每日n刷:leetcode2. 两数相加
2. 两数相加链表模拟模拟O(n)因为给的链表就是逆序的,输出也是逆序的,而且在进位的时候需要关注,所以直接从链表头遍历。需要关注进位的问题,在遍历结束之后如果进位还存在,那么需要把进位放在最后一位。class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode res = new ListNode(); ListNode p = res;原创 2022-01-25 13:31:38 · 221 阅读 · 0 评论 -
每日n刷:leetcode1. 两数之和
1. 两数之和原创 2022-01-25 13:05:59 · 299 阅读 · 0 评论
分享