![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
大鸡腿同学
SoftRpc contribuer; 21年拿到阿里淘系口头offer; 目前在某公司架构组搬砖,多多指教~
展开
-
TopK高频重复 算法题
文章目录前言解法代码前言最近广州某大厂面,笔试也有算法,惊了~题目就是找出2G数据里头,重复最多的前100个,虚拟机只有1G内存解法1.首先是分治法因为内存不够,就1G1G来算咯,然后再将结果进行合并即可。2.就是一个TopK 的问题,可以采用堆3.重复次数最多需要用map来记录key对应出现的次数有多少代码public static void main(String[] args) { /*PriorityQueue<Integer> queue = ne原创 2021-08-24 16:41:01 · 181 阅读 · 0 评论 -
LeeCode 53. 最大子序和
文章目录题目题解代码题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。题解动态规划我们可以记录之前和,还有最大和,如果说之前的和<0,说明之前的总数太小了,剔除掉。分类:如果是一直变大的,比如[1,2,3],那么之前的和加上当前的数,最大和就是之前最大和跟当前和比较,取Math.max如果是中间忽然变小,之前和小于0,比如[1,-2,-3],这时我们把之前和清零,然后现在的和变成当前的数,方便后续判断,这时最大和就是之前最大和原创 2021-06-03 11:37:53 · 2427 阅读 · 8 评论 -
leecode 峰值元素是指其值大于左右相邻值的元素
文章目录题目题解代码题目峰值元素是指其值大于左右相邻值的元素。给你一个输入数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。题解只要是一直递增,那就是最后那个最大的,如果是两头小中间大的话,就取中间那个值。代码class Solution { public int findPeakElement(int[] nums) { if(nums.length==0){ return原创 2021-06-02 18:21:18 · 523 阅读 · 2 评论 -
Leecode 请判断一个链表是否为回文链表。
文章目录题目代码改进题目输入: 1->2->2->1输出: true代码class Solution { public boolean isPalindrome(ListNode head) { List<Integer> list = new ArrayList<>(); list.add(head.val); if(head.next==null){ return tr原创 2021-05-25 11:11:43 · 144 阅读 · 0 评论 -
leecode 101. 对称二叉树
文章目录题目题解代码官网题解题目给定一个二叉树,检查它是否是镜像对称的。题解我这个方法还是广度遍历,然后储存起来在进行对比代码class Solution {public static class TreeNodes extends TreeNode{ int level; TreeNodes(TreeNode node,int level){ this.level = level; this.val = nod原创 2021-05-24 16:28:42 · 114 阅读 · 3 评论 -
leecode 143. 重排链表
文章目录题目题解代码题目题解链表不适合排序,所以先把他搞成数组,然后将next进行重设,最后把多余的节点掐掉代码class Solution { public void reorderList(ListNode head) { //链表转list存储 List<ListNode> list = new ArrayList(); ListNode temp = head; while (temp != null)原创 2021-05-11 11:20:31 · 83 阅读 · 0 评论 -
leecode 21. 合并两个有序链表
文章目录题目题解代码题目题解一般类似的题都是有快慢指针,l1,l2分别两个指针,然后对比,然后排序有个细节就是一个header,我们需要用另一个ListNode去拿到值,保持header的值不会变。代码/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int原创 2021-04-29 18:16:14 · 95 阅读 · 0 评论 -
leecode 199. 二叉树的右视图
文章目录题目涉及知识点BFS,广度遍历DFS,深度遍历代码参考博客题目涉及知识点二叉树的BFS,DFS 深度遍历跟广度遍历BFS,广度遍历Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { TreeNode node = queue.poll(); if (node.le原创 2021-04-26 17:17:40 · 118 阅读 · 0 评论 -
Leecode 121. 买卖股票的最佳时机
文章目录题目题解代码题目买卖股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。题解原本我的打算暴力解开的,先固定一个值,遍历后面的数,如果大于最大的利润就返回后面时间超时了,使用了只遍历一遍,找出最小值,还有当前利润,如果当前原创 2021-04-26 10:34:19 · 71 阅读 · 0 评论 -
Leecode 两数之和
文章目录题目题解代码题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。题解就是先固定一个值,然后另一个值在它后面移动,直到遍历完。没有找到就那个固定值往后一位,后面的值继续遍历代码class Solution { public int[] twoSum(int[] nums, int ta原创 2021-04-25 14:06:05 · 87 阅读 · 0 评论 -
Leecode 25. K 个一组翻转链表
文章目录题目题解代码题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。题解也是跟反转联表一样,先储存值,如果k是1的话,直接返回使用变量去递增,如果能整除说明到位了,截断然后反转,如果无法整除又遍历到头,那直接添加值代码class原创 2021-04-25 11:43:21 · 85 阅读 · 0 评论 -
Leecode 206. 反转链表
文章目录题目题解代码题目反转链表题解比较骚操作,就是不改变原来指向,只是重新赋值代码public ListNode reverseList(ListNode head) { if(head==null){ return head; } List<Integer> list = new ArrayList<>(); list.add(head.val); ListNo原创 2021-04-25 10:59:23 · 145 阅读 · 1 评论 -
Leecode 二叉树的锯齿形层序遍历(蛇形打印)
文章目录题目面试题解法我们想象一下遍历过程代码题外(如何构建leecode的二叉树)题目二叉树的锯齿形层序遍历 给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。面试题曾经在腾讯新零售一面就遇到这道题,蛇形打印二叉树。解法这是一个二叉树,蛇形打印。我们想象一下遍历过程遍历上一行的时候,下一行的节点是跟上一行的从哪到哪的方向一致的,数字是相反的!第一轮:节点1开始遍历,从左往右:节点一样从左往右,节点是[2,3],原创 2021-04-24 14:23:36 · 389 阅读 · 0 评论 -
LeeCode 面试题 01.07. 旋转矩阵
文章目录题目题解代码题目给定 matrix =[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]题解找下规律,第一行变成最后一列。看下我们的循环[i,j],j在递增,行不变,列每次+1—>第一列转成第一行,第几行会变成第几列代码class Solution { public void rotate(int[][] matrix) { int n = matr原创 2021-04-22 17:02:30 · 130 阅读 · 0 评论 -
LeeCode 1379. 找出克隆二叉树中的相同节点
文章目录题目题解代码题目给你两棵二叉树,原始树 original 和克隆树 cloned,以及一个位于原始树 original 中的目标节点 target。其中,克隆树 cloned 是原始树 original 的一个 副本 。请找出在树 cloned 中,与 target 相同 的节点,并返回对该节点的引用(在 C/C++ 等有指针的语言中返回 节点指针,其他语言返回节点本身)。题解就是使用遍历,左遍历完,右遍历代码/** * Definition for a binary tree n原创 2021-04-15 10:57:16 · 191 阅读 · 0 评论 -
LeeCode 剑指 Offer 04. 二维数组中的查找
文章目录题目题解代码题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题解如果说从[0,0]开始,不管是向左向右,都是变大,规律比较难找如果说从这个角开始,就容易多了,比这个数大,向右移动,比这个数小就像上移动。代码class Solution { public boolean findNumberIn2DArray(int[][] matr原创 2021-04-12 23:50:35 · 80 阅读 · 0 评论 -
LeeCode 不重复字符的 最长子串
文章目录题目代码思考题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。LeeCodehttps://leetcode-cn.com/problems/longest-substring-without-repeating-characters/代码class Solution { public int lengthOfLongestSubstring(String s) { int max = 0;//最大无重复子串 int left原创 2021-03-27 14:47:26 · 118 阅读 · 0 评论 -
LeeCode 08.07. 无重复字符串的排列组合
文章目录题目解法代码题目无重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合,字符串每个字符均不相同。解法代码public static void main(String[] args) { System.out.println(JSON.toJSONString(permutation("abc"))); } public static String[] permutation(String S) { List<Stri原创 2021-04-09 13:48:17 · 163 阅读 · 0 评论