![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
王大全
哥哼调。
展开
-
(2)链表
2. 回文链表 if(fast!=null) slow=slow.next while(right!=null)转载 2022-07-09 22:19:31 · 56 阅读 · 0 评论 -
(1)链表 - 总结
(1)环形链表 - 判断是否有环 -快慢指针,注意判断相等处用slow==fast,而不是用slow.val == fast.val (2)环形链表 - 判断是否有环-有返回环的起点-没有返回NULL -快慢指针,注意为没有环时, if(fast = =null || fast.next = = null) return null; (3)相交链表 - 判断俩链表是否有交点-有返回交点-没有返回NULL -快慢指针,注意为不为null时,用else if(p1==null) p1=headB; el转载 2022-07-06 22:55:02 · 65 阅读 · 0 评论 -
找出第k小的数对距离(排序+二分搜索)
数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 k,则right原创 2022-06-23 23:34:48 · 212 阅读 · 0 评论 -
机器人的运动范围
机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子? 输入:m = 2, n = 3, k = 1 输出:3 public Soution原创 2021-09-15 23:24:06 · 72 阅读 · 0 评论 -
前k个高频元素
前K个高频元素 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] class Solution{ public int[] topKFrequent(int[] nums, int k){ Map<Integer, Integer> occurrences = new HashMap<Integer, I原创 2021-09-14 23:40:18 · 73 阅读 · 0 评论 -
最长连续序列
最长连续序列 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 class Soution{ public int longestConsective(int[] nums){ int n = nums.length; if(n<2){ return n; } Arrary.sort(nums); int res = 1, t = 1; for(int i = 1; i < n; ++i){ if原创 2021-08-22 14:53:11 · 41 阅读 · 0 评论 -
矩阵中的路径
矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如在下面的3x4的矩阵中包含一条字符串"bcced"的路径(路径中的字母用斜体表示)。但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。 解题思路:dfs深度优先搜索(暴力破解)+剪枝 clas原创 2021-08-22 14:40:36 · 92 阅读 · 0 评论 -
重建二叉树
重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出二叉树并输出它的头结点 class Solution{ private Map<integer,integer> indexMap; public TreeNode myBuildTree(int[] preorder, int[] inorder,原创 2021-08-22 14:14:14 · 57 阅读 · 0 评论 -
二维数组中的查找
二维数组的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路:从二维数组右上角开始查询 class Solution{ public boolean findNumberIn2DArrary(int[][] matrix, int target){ if(matrix==null|| matrix.length==0||matrix[0]原创 2021-08-22 13:36:18 · 61 阅读 · 0 评论 -
最长无重复子串
无重复最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 class Solution { public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> occ = new HashSet<原创 2021-08-15 19:27:30 · 60 阅读 · 0 评论 -
最长回文子串
最长回文子串 给你一个字符串 s,找到 s 中最长的回文子串。 示例 1: 输入:s = “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 public class Solution { public String longestPalindrome(String s) { int len = s.length(); if (len < 2) { return s; } int原创 2021-08-15 19:25:07 · 63 阅读 · 0 评论 -
最长递增子序列
最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入:nums = [10,9,2,5,3,7,101,18] 输出:4 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 class Solution { public int lengthOfLIS(int[] nums) {原创 2021-08-15 19:22:04 · 55 阅读 · 0 评论