算法与数据结构
王大全
哥哼调。
展开
-
(2)链表
2. 回文链表 if(fast!=null) slow=slow.nextwhile(right!=null)转载 2022-07-09 22:19:31 · 79 阅读 · 0 评论 -
(1)链表 - 总结
(1)环形链表 - 判断是否有环-快慢指针,注意判断相等处用slow==fast,而不是用slow.val == fast.val(2)环形链表 - 判断是否有环-有返回环的起点-没有返回NULL-快慢指针,注意为没有环时, if(fast = =null || fast.next = = null) return null; (3)相交链表 - 判断俩链表是否有交点-有返回交点-没有返回NULL-快慢指针,注意为不为null时,用elseif(p1==null) p1=headB;el转载 2022-07-06 22:55:02 · 89 阅读 · 0 评论 -
找出第k小的数对距离(排序+二分搜索)
数对 (a,b) 由整数 a 和 b 组成,其数对距离定义为 a 和 b 的绝对差值。给你一个整数数组 nums 和一个整数 k ,数对由 nums[i] 和 nums[j] 组成且满足 0 k,则right原创 2022-06-23 23:34:48 · 254 阅读 · 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输出:3public Soution原创 2021-09-15 23:24:06 · 87 阅读 · 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 · 110 阅读 · 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 · 55 阅读 · 0 评论 -
矩阵中的路径
矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如在下面的3x4的矩阵中包含一条字符串"bcced"的路径(路径中的字母用斜体表示)。但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。解题思路:dfs深度优先搜索(暴力破解)+剪枝clas原创 2021-08-22 14:40:36 · 116 阅读 · 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 · 68 阅读 · 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 · 93 阅读 · 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 · 98 阅读 · 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 · 96 阅读 · 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 · 73 阅读 · 0 评论