数据结构
文章平均质量分 51
Wang.T
Everything is nothing
展开
-
搜索二维数组
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]]target = 3输出: true示例 2:输入:m...原创 2018-11-13 19:07:52 · 582 阅读 · 0 评论 -
寻找旋转排序数组中的最小值II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。注意数组中可能存在重复的元素。示例 1:输入: [1,3,5]输出: 1示例 2:输入: [2,2,2,0,1]输出: 0代码实现一:public int findMin(int[] nums){ ...原创 2018-11-16 15:00:37 · 208 阅读 · 0 评论 -
数组元素平方处理
给你一个有序整数数组,数组中的数可以是正数、负数、零,请实现一个函数,这个函数返回一个整数:返回这个数组所有数的平方值中有多少种不同的取值。举例:nums = {-1,1,1,1} 你应该返回1,因为这个数组所有数的平方取值都是1,只有一种取值nums = {-1,0,1,2,3} 你应该返回4,因为nums数组所有元素的平方值一共4种取值:1,0,4,9题目分析:求平方值,那...原创 2018-11-23 21:02:48 · 5490 阅读 · 0 评论 -
按奇偶排序数组
给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。提示:1 <= A.length <= 50000 <= A[i] <= 5000...原创 2018-11-23 21:23:09 · 1134 阅读 · 0 评论 -
数组中重复的数据
给定一个整数数组 a,其中1 ≤ a[i] ≤ n(n为数组长度), 其中有些元素出现两次,而其他元素出现一次。找到所有出现两次的元素。你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?示例:输入:[4,3,2,7,8,2,3,1]输出:[2,3]题目分析:使用额外数组处理:使用新的数组存放数据定义的新数组存储元素的方式为:其下标是数组a中的元素,这样,只要元...原创 2018-11-23 21:39:34 · 1076 阅读 · 0 评论 -
删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 – head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 -> 9示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变...原创 2018-11-17 20:53:59 · 2071 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8,8,10], ta...原创 2018-11-06 21:42:11 · 1961 阅读 · 0 评论 -
搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0题目分析...原创 2018-11-06 21:22:52 · 177 阅读 · 0 评论 -
验证二叉树的前序序列化
序列化二叉树的一种方法是使用前序遍历。当我们遇到一个非空节点时,我们可以记录下这个节点的值。如果它是一个空节点,我们可以使用一个标记值记录,例如 #。 9 / \ 3 2 / \ / \ 4 1 # 6/ \ / \ / \# # # # # #例如,上面的二叉树可以被序列化为字符串 "9,3,4,#,#,1,#,#,2,#,...原创 2018-11-03 14:36:55 · 1237 阅读 · 0 评论 -
括号的分数
给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:() 得 1 分。AB 得 A + B 分,其中 A 和 B 是平衡括号字符串。(A) 得 2 * A 分,其中 A 是平衡括号字符串。示例 1:输入: "()"输出: 1示例 2:输入: "(())"输出: 2示例 3:输入: "()()"输出: 2示例 4:输入: "(()(()))"输出: 6...原创 2018-11-03 14:50:45 · 1243 阅读 · 0 评论 -
有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。题目分析:根据题目的意思,字母异位词是指由相同的字母按照不同的顺序组成的单词,根据此含义...原创 2018-11-03 23:37:22 · 7442 阅读 · 0 评论 -
两个数组的交集
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。题目分析:根据题目的意思,需要求出两个数组中的相同元...原创 2018-11-03 23:46:21 · 336 阅读 · 0 评论 -
两个数组的交集II
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。题目分析:与两个...原创 2018-11-03 23:58:18 · 189 阅读 · 0 评论 -
搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2], targ...原创 2018-11-06 20:07:02 · 5224 阅读 · 0 评论 -
搜索旋转排序数组 II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。示例 1:输入: nums = [2,5,6,0,0,1,2], target = 0输出: true示例 2:输入: nums = [2,5,...原创 2018-11-06 20:41:45 · 220 阅读 · 0 评论 -
寻找旋转排序数组中的最小值
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0题目分析:数组是升序排列的,且其中没有重复元素,只是有可能会在某...原创 2018-11-06 20:56:35 · 716 阅读 · 0 评论 -
合并两个有序的链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4题目分析:要将两个有序的链表连接起来,可以设置两个指针分别指向两个链表的头节点,从头节点开始比较值,把值小的节点加在另一个节点后面,比较完后,两个指针后移再比...原创 2018-11-17 21:08:44 · 484 阅读 · 0 评论 -
反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?题目分析:将一个单链表反转,令前一个节点是后一个节点的next即可代码实现:public static class ListNode { ...原创 2018-11-17 21:21:15 · 210 阅读 · 0 评论 -
回文链表
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?题目分析:很容易想到将链表折半分开,反转后半部分,对应比较值。代码实现:public static class ListNode { int ...原创 2018-11-17 21:30:37 · 243 阅读 · 0 评论 -
翻转字符串里面的单词
给定一个字符串,逐个翻转字符串中的每个单词。示例:输入: "the sky is blue".输出: "blue is sky the".说明:无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。题目分析:将字符串里面的单词翻转,并去除多余的空格;可以使用split()...原创 2018-12-03 13:13:34 · 323 阅读 · 0 评论 -
压缩字符串
d给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。示例 1:输入:["a","a","b","b","c","c","c"]输出:返回6,输入数组的前6个字符应该是:["a","2&qu原创 2018-12-03 13:26:43 · 227 阅读 · 0 评论 -
字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2.注意事项:您可以假定该字符串只包含小写字母。题目分析:寻找字符串中的第一个不重复的字符,首先想到的是遍历数组查找;之后可以想到用Map集合类存储查找。一、设置首尾指针查找,并设置一个值存储找到的第一...原创 2018-12-03 13:38:10 · 353 阅读 · 0 评论 -
排序算法Java实现
0、排序算法说明0.1 排序的定义对一序列对象根据某个关键字进行排序。0.2 术语说明稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面;不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。...转载 2019-09-09 17:09:44 · 268 阅读 · 1 评论 -
2020奇安信秋招Java笔试第二题---公共祖先
今天晚上做了奇安信的Java开发在线笔试题,编程题一共两道,记录一下解答思路第二题给的题目意思是给定一棵平衡二叉树,满二叉树(无子节点用-1补齐),输入第一个数为二叉树的层数,输入一个数组为二叉树的节点值,再输入两个值表示给定的两个节点,要求找到这两个节点的最近公共祖先。import java.util.Scanner;/** * Created by wsw on 2019/9/9 2...原创 2019-09-10 10:34:49 · 1017 阅读 · 0 评论 -
2020奇安信秋招Java笔试第一题---线程树
今天晚上做了奇安信的Java开发在线笔试题,编程题一共两道,记录一下解答思路第一题给的题目意思是输入两个数组,第一个数组是子线程(子节点),第二个数组是父线程(父节点),删除一个线程会删除此线程的所有子线程,问给出一个要删除的线程,总共要删除掉几个线程?import java.util.LinkedList;import java.util.Queue;import java.util.S...原创 2019-09-09 23:39:54 · 1434 阅读 · 0 评论 -
微众银行秋招Java笔试第一题---阶乘结果的最后一个不为0的数
昨天下午做了微众银行的Java开发在线笔试题,编程题一共三道,记录一下解答思路第一题给的题目意思是给定一个数,求这个数阶乘结果的最后一个不为0的数为多少例如:10的阶乘为3628800那么阶乘结果最后一个不为0的数是8代码如下:import java.math.BigDecimal;import java.util.Scanner;/** * Created by wsw ...原创 2019-09-20 15:58:39 · 633 阅读 · 0 评论 -
微众银行秋招Java笔试第二题---询问次数
昨天下午做了微众银行的Java开发在线笔试题,编程题一共三道,记录一下解答思路第二题给的题目意思很绕,而且表达的意思也很复杂,感觉在做语文阅读理解,最后发现要表达的意思就是:一个数二进制有n位,那么确定这个数需要对每一位询问,也就是询问n次但是有n!种问法,输出n!比如3代表这个数是二进制表示是有3位,是一个介于0-7之间的数,需要分别确认第一位,第二位,第三位是不是0;根据确认的顺序不同,一...原创 2019-09-20 16:27:13 · 742 阅读 · 0 评论 -
验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: false题目分析:首先字符串中多余的字符不在考虑的范围之类,而如果字符串是回文串,则可以设置双指针,...原创 2018-12-03 11:23:04 · 969 阅读 · 0 评论 -
删除排序数组中的重复项II
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定 nums = [1,1,1,2,2,3],函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。你不需要考虑数组中超出新长度后面的...原创 2018-12-03 11:14:38 · 316 阅读 · 0 评论 -
移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5题目分析:想到给定的值在链表中可能存在3个地方,两端和中间,所以分三种情况处理。代码实现:public static class ListNode{ int val;...原创 2018-11-17 21:39:24 · 181 阅读 · 0 评论 -
环形链表
给定一个链表,判断链表中是否有环。进阶:你能否不使用额外空间解决此题?题目分析:链表中有环是指:1->2->3无环,1->2->3->4->3有环查资料,得知此题用快慢指针解决,即设定两个指针,快指针一次后移2位,慢指针一次后移1位,如若有环,快指针一定会追上慢指针。代码实现:public static class ListNode{ i...原创 2018-11-17 21:50:11 · 221 阅读 · 0 评论 -
环形链表II——寻找环形链表的入口
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回 null。说明:不允许修改给定的链表。进阶:你是否可以不用额外空间解决此题?题目分析:一、使用额外的空间处理即使用HashMap,遍历链表并将节点存储在HashMap中,如果出现重复的节点,则就是环形链表的入环节点,返回。代码实现:public static class ListNode{ int va...原创 2018-11-18 10:52:13 · 1021 阅读 · 1 评论 -
删除链表中的倒数第n个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题目分析:一、设快慢指针slow和fast,让fast先走n-1步,然后再同时后移...原创 2018-11-18 11:08:42 · 2099 阅读 · 0 评论 -
移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素...原创 2018-11-26 09:26:23 · 447 阅读 · 0 评论 -
实现strStr()
实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = "bb...原创 2018-11-26 09:37:14 · 1492 阅读 · 0 评论 -
合并区间
给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。题目分析...原创 2018-12-03 10:46:12 · 351 阅读 · 0 评论 -
删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 ...原创 2018-12-03 11:03:03 · 184 阅读 · 0 评论 -
Java自己实现split()方法---按照给定的目标字符串分割原始字符串
方法一:先利用字符串的contains()方法判断原始字符串是否包含目标字符串,然后根据下标分割,将前面一段字符串加入list列表,然后删除给定目标字符串,继续while循环;最后再将剩余的最后一段字符串加入列表。public static String[] split(String array, String target) { List<String> list...原创 2019-09-25 21:14:32 · 1268 阅读 · 0 评论 -
相交链表
编写一个程序,找到两个单链表相交的起始节点。例如,下面的两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3在节点 c1 开始相交。注意:如果两个链表没有交点,返回 null...原创 2018-11-06 09:23:56 · 153 阅读 · 0 评论 -
数据结构——二叉树
二叉树前序,中序,后序,按层遍历:#include #include #include#includeusing namespace std;#define N 100char *a="ABC##D#E##F##"; //扩充二叉树t的前序序列typedef s原创 2017-11-08 21:10:02 · 578 阅读 · 0 评论