![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 73
CodeJames
重庆大学研究生毕业,从事IOT后台开发,同名G.Z.H
展开
-
算法挑战6-9天
算法挑战第六天3.无重复字符的最长子串给定一个字符串s,请你给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。思路:利用双指针和Set集合维护一个滑动窗口,在遍历的过程中,比较滑动窗口值的大小。class Solution { public int lengthOfLongestSubstring(String s) {原创 2021-08-23 22:32:28 · 97 阅读 · 0 评论 -
算法打卡3-5天
第三天—双指针283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。思路1:遍历数组元素,遇到非零的元素将它添加到数组的前端,之后将数组后面的清零。public void moveZeroes(int[] nums) { int index = 0; for(int i=0;i&原创 2021-08-16 23:23:48 · 170 阅读 · 1 评论 -
算法挑战2
977. 有序数组的平方给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。示例 1:输入:nums = [-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]思路:使用两个指针分别指向位置 0和 n−1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。代码如下:public int[] sortedSqu原创 2021-08-13 15:04:24 · 71 阅读 · 0 评论 -
算法挑战1
第一天—二分查找704.二分查找题目:给定一个 n个元素有序的(升序)整型数组nums和一个目标值 target ,写一个函数搜索 nums中的 target,如果目标值存在返回下标,否则返回 -1。示例:输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4思路:典型的二分查找public int search(int[] nums, int target){ int left = 0, right =原创 2021-08-12 17:52:29 · 95 阅读 · 0 评论 -
Bag&DynamicArray
之前通过B站了解到了几个GitHub网站,其中一个较好的是:http://github.com/trending自己常常在GitHub上进行浏览,其中一个开源项目叫JAVA,主要是讲Java相关算法的。链接地址。自己学习了几个算法,接下来简单介绍一下。Bag实现了Bag类,实现add和contains方法,在类中具体Element使用的Node来实现存储,具体看代码,在代码中Bag类实现了Iterable接口,可以实现迭代访问;从add方法中可以知道,添加元素是从头部开始添加的,首先建立一个ol原创 2021-06-15 11:51:16 · 1115 阅读 · 1 评论 -
Manacher算法
背景Manacher使用来求取字符串中最长的回文半径的。三大要素回文半径回文右边界回文边界中心思想常见的方法是:从左到右进行暴力扩,即求每个值向两边扩的半径。manacher算法利用了一个回文半径数组来进行加速,通过利用前面每个值的回文半径来指导后面的值的半径,从未达到加速的目的。在Manacher中有两种情况定义变量:i:此时遍历值下标,R回文右边界,C回文中心,L关于回文中心对称的左边界,l是i关于回文中心对称的下标。第一种情况:i 在R外面,此时暴力扩第二种情况:i 在R原创 2021-04-21 17:00:15 · 102 阅读 · 0 评论 -
剑指Offer优解
对剑指Offer里面的题进行整理,找出优解,力求代码简单好理解原创 2020-10-24 12:00:46 · 297 阅读 · 0 评论 -
数据结构-Tree(一周写的)
摘要:一周写的树数据结构的算法题,总结一下。检查平衡性判断一棵树是否平衡:对于任何一个节点,其两棵子树的高度不超过1。示例1给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。思路:递归遍历找到高度。难点:获取树的高度,递归遍历左右节点。class Solution{ public boolean isBalanced(TreeNode root){ if (ro原创 2020-06-27 14:16:18 · 191 阅读 · 0 评论 -
再来一篇深度优先遍历/搜索总结?
再来一篇深度优先遍历/搜索总结?简介:深度优先搜索算法(Depth-First-Search, DFS),最初是一种用于遍历或搜索树和图的算法,在LeetCode中很常见,虽然感觉不难,但是理解起来还是有点难度的。简要概括,深度优先的主要思想就是“不撞南墙不回头”,“一条路走到黑”,如果遇到“墙”或者“无路可走”时再去走下一条路。思路假如对树进行遍历,沿着树的深度遍历树的节点,尽可能深的搜索树的分支,当达到边际时回溯上一个节点再进行搜索。如下图的一个二叉树。首先给出这个二叉树的深度优先遍历的结果原创 2020-05-22 21:02:42 · 373 阅读 · 0 评论 -
真的懂递归吗?
递归算法可以把本身问题分解规模小的同类问题,通过求解规模小的同类问题的解,之后不断进行返回值,最终可以求得规模大的问题。本文通过,栈空间分配的方式来讲解递归的过程,能够更加清晰地认识递归的调用过程。原创 2020-05-16 15:43:20 · 264 阅读 · 0 评论 -
求得二叉搜索树的第k小的元素
求得二叉搜索树的第k小的元素给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。须知:二叉搜索树,又叫二叉排序树,二叉查找树。特点是:左子树的所有元素都小于等于根节点,右子树的所有节点都大于等于根节点。并且,二叉搜索树的中序遍历是升序排列的。自己的思路:刚开始不知道二叉搜索树的性质;自己采用了优先队列的方式: public int kthSmal...原创 2020-05-07 10:55:44 · 309 阅读 · 0 评论 -
重温常见的排序算法-复习数据结构-java实现
利用java语言实现常见的排序算法,具体有冒泡、选择、插入、快速、归并、桶排序,同时列出了对应算法的复杂度等属性。原创 2020-04-20 21:30:08 · 194 阅读 · 0 评论 -
LeetCode(分割回文串)-回溯
20200416题目 :分割回文串给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]思路 :回溯codepackage palindromePartitioning;import java.util.*;public class...原创 2020-04-16 10:32:36 · 207 阅读 · 0 评论 -
LeetCode(回文字符串)
20200414题目 :验证回文子串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。**说明:**本题中,我们将空字符串定义为有效的回文串。示例 :输入: "A man, a plan, a canal: Panama"输出: true思路 :利用两个指针,分别指向头部和尾部,之后判断,不断向中间靠拢。class Solution{ pub...转载 2020-04-14 09:57:15 · 437 阅读 · 0 评论 -
LeetCode-股票
20200413题目 :买股票的最佳时机给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润...转载 2020-04-13 09:58:22 · 107 阅读 · 0 评论 -
LeetCode(杨辉三角)
20200412题目 :杨辉三角给定一个非负整数numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它左上角和右上角的数的和。示例 :输入: 5输出:[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]思路 :(动态规划)当知道一行杨辉三角,就可以根据每对相邻的值轻松地算出它的下一行。...转载 2020-04-12 09:29:57 · 196 阅读 · 0 评论 -
LeetCode(单词搜索)
20200411题目 :单词搜索给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例 :board =[ ['A','B','C','E'], ['S','F','C','S'], ['A','D','E','E']]给...原创 2020-04-11 08:44:04 · 349 阅读 · 0 评论 -
LeetCode(子集)
20200410题目 :子集给定一组不含重复元素的整数数组nums,返回该数组所有的子集。**说明:**解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], []]回溯法 :是一种探索所有潜在可能性找到解决方案的算法。如果当前方案不是正...转载 2020-04-10 10:10:43 · 124 阅读 · 0 评论 -
LeetCode(颜色分类)
20200409题目 :颜色分类给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例 :输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]思路 :利用三个指针对三种颜色...转载 2020-04-09 09:16:24 · 215 阅读 · 0 评论 -
LeetCode(平方根&&简化路径)
20200407题目:x的平方根实现int sqrt(int x)函数。思路 :牛顿法x(k+1)=12[xk+xxk]x_{(k+1)}=\frac{1}2[x_k+\frac{x}x_k]x(k+1)=21[xk+xxk]codeclass Solution{ public int mySqrt(int x){ if(x < 2) ret...转载 2020-04-07 09:43:59 · 162 阅读 · 0 评论 -
LeetCode(加一&&二进制求和)
20200406题目 :加一给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。思路 :三种情况除数字9之外的数字加1;数字9;特殊:999、99之类;cod...转载 2020-04-06 09:29:03 · 167 阅读 · 0 评论 -
LeetCode(合并区间)
20200405题目 :合并区间给出一个区间的集合,请合并所有重叠的区间。示例:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].思路:1.首先根据二维数组中每个一维数组的[0]进行升序排序,即根据start进行排序;2.合并条件是前一个...转载 2020-04-05 09:48:37 · 1049 阅读 · 0 评论 -
LeetCode(跳跃游戏)
20200404题目 :跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否可以到达最后的位置。示例:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。answer1利用递归回溯模拟从第一个位置跳到最后位置的...原创 2020-04-04 13:05:50 · 266 阅读 · 0 评论 -
LeetCode(螺旋矩阵)-模拟旋转
给定一个包含m×n个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。转载 2020-04-03 09:48:13 · 149 阅读 · 0 评论 -
LeetCode(字母异位词分组)
20200402题目 :字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "nat", "bat"],输出:[ ["ate","eat","tea"], ["nat","tan"], ["bat"]]思路 :以排序后的字符串作为map的key,建立...转载 2020-04-02 09:06:08 · 193 阅读 · 0 评论 -
LeetCode(旋转图像)
给定一个 n × n 的二维矩阵表示一个图像,将图像顺时针旋转 90 度。转载 2020-04-01 09:18:56 · 135 阅读 · 0 评论 -
LeetCode(全排列)
20200331题目 :全排列给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路 :回溯算法,不合适就回退一步。codeclass Solution{ public List<List<...转载 2020-03-31 09:34:38 · 125 阅读 · 0 评论 -
LeetCode(有效的数独)
判断一个9*9的数独是否有效。根据以下规则,验证已经填入的数字是否有效即可。转载 2020-03-30 09:10:48 · 120 阅读 · 0 评论 -
LeetCode(查找元素的第一个和最后一个位置)
给定一个按照升序排列的整型数组nums和一个目标值target。找出给定目标值在数组中的开始位置和结束位置。原创 2020-03-29 09:23:31 · 337 阅读 · 0 评论 -
LeetCode(两数相除)
给定两个整数,被除数dividend和除数divisor。将两数相除,要求不使用乘法,除法和mod运算符。转载 2020-03-28 10:03:58 · 356 阅读 · 0 评论 -
LeetCode(字符串转整型)
mysql两个表联结,怎样把一个字符串转为一个整数。转载 2020-03-27 09:40:26 · 195 阅读 · 0 评论 -
LeetCode-(Z字形变换)
20200326继续刷题题目 :Z字形变换将一个给定字符串根据给定的行数,以从上往下,从左往右进行Z字形排列。比如输入字符串为"LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生一个新的字符串,比如:"LCIRETOESIIGEDHN"。示例:...原创 2020-03-26 09:21:10 · 383 阅读 · 0 评论 -
剑指offer
本人在疫情这段时间里,花了一个月的时间,在LeetCode上对剑指offer的题目进行了整理,总共74到题。这是一个整体版,每日版在博客也能见。原创 2020-03-25 08:52:59 · 662 阅读 · 0 评论 -
剑指offer-20200324
20200324题目 :把字符串转为整数写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组...原创 2020-03-24 09:23:18 · 83 阅读 · 0 评论 -
剑指offer-20200323
20200323题目 :不用加减法做加法写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。思路 :使用按位异或和按位与运算:计算a+b等价于(a^b) + ((a & b) << 1)。((a & b) << 1)表示进位。codeclass Solution{ public int add(...原创 2020-03-23 09:02:39 · 86 阅读 · 0 评论 -
剑指offer-20200322
20200322题目 :股票的最大利润假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。...原创 2020-03-22 09:07:21 · 91 阅读 · 0 评论 -
剑指offer-20200320
20200320题目 :队列的最大值请定义一个队列并实现函数max_value得到队列里的最大值,要求函数max_value、push_back和pop_front的均摊时间复杂度都是O(1)O(1)O(1)。若队列为空,pop_front 和 max_value 需要返回 -1codeclass MaxQueue { Queue<Integer> que; Deq...原创 2020-03-20 09:52:55 · 68 阅读 · 0 评论 -
剑指offer-20200319
20200319题目 :字符串的左旋操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。输入: s = "abcdefg", k = 2输出: "cdefgab"codeclass Solution{ public String reverse...转载 2020-03-18 22:48:55 · 71 阅读 · 0 评论 -
剑指offer-20200318
20200318题目 :和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。思路 :利用一个滑动窗口codeclass Solution{ public int[][] findContinuousSequence(int target){ ...原创 2020-03-18 09:57:24 · 83 阅读 · 0 评论 -
剑指offer-20200317
20200317题目 数组中数字出现的次数||在一个数组中除了一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。示例:输入:nums = [3,4,3,3]输出:4思路 :hashmap遍历codeclass Solution { Map<Integer, Integer> map = new HashMap<>(); ...原创 2020-03-17 10:02:26 · 76 阅读 · 0 评论