随笔分类 - 数据结构与算法
摘要:将整数字符串转换成整数值 给定一个字符串str,如果str符合日常书写的规范,并属于32位整数的范围,返回str所代表的整数值,否则返回0。如 023, A13, 2147483648,均返回0。 【解题思路】 定义四个变量,flag表示正负,res表示结果,minq表示最小值除以10的商,minr
阅读全文
摘要:判断两个字符串是否互为旋转词 如果一个字符串str,把字符串str前面的任意部分挪到后面形成的字符串叫做str的旋转词。给定两个字符串,判断是否互为旋转词。比如 a="abcd",b="cdab",true a="abcd",b="bcad",false 【解题思路】 如果长度不一样,肯定是fals
阅读全文
摘要:去掉字符串中连续出现K个0的子串 给定一个字符串str,和一个整数k, 如果str中正好有连续K 个'0'字符出现,把连续的 k 个 '0'去掉,返回处理后的子串。 【解题思路】 1. 定义两个变量,count表示'0'连续出现的次数,start表示连续出现的开始位置, 2. 将去掉连续0 的时机放
阅读全文
摘要:字符串中数字子串的求和 给定一个字符串str,求其中全部数字串所代表的数字之和 1. 忽略小数点,“ A1.3 ” 表示的数字就是包含两个数字 1 和 3 2. 紧贴数字的左边出现 “-”,其连续出现的数量如果为奇数,就视为 负,如果为偶数,就视为 正 “ A-1BC--23” 表示的是 -1 和
阅读全文
摘要:判断两个字符串是否互为变形词 给定两个字符串 str1 和str2 ,如果两个字符串中出现的字符种类一样,次数也一样,则互为变形词,实现一个函数判断两个字符串是否互为变形词。例如 str1=“123”,str2=“132”,true; str1=“123”,str2=“1332”,false; 【解
阅读全文
摘要:按照左右半区的方式重新组合单链表 给定一个单链表的头部节点 head,链表长度为 N ,如果 N 为偶数,那么前 N/2 算作前半区,后 N/2 算作后半区,如果 N 为奇数,那么前 N/2 算作前半区,后 N/2 + 1算作后半区。左半区从左到右依次记为 L1->L2->...,右半区从左到右依次
阅读全文
摘要:合并两个有序的单链表 给定两个有序单链表的头节点 head1 和 head2,合并两个有序链表,合并后链表依然有序,并返回合并后的链表的头节点,例如:0->2->3->7->null 和 1->3->5->7->9->null,合并后的链表为 0->1->2->3->3->5->7->7->9->n
阅读全文
摘要:向有序的环形单链表中插入新节点 一个环形链表从头节点开始不会降序,同时最后的节点指向头节点。给定一个环形单链表的头节点head和一个整数num,生成新节点并将其插入到环形链表中,保证插入后的链表仍然有序。
阅读全文
摘要:单链表的选择排序 给定一个无序单链表的头节点 head,实现单链表的选择排序,要求额外空间复杂度是 O(1) 【解析】 要求额外空间复杂度是 O(1),所以不能使用数组等容器进行排序,直接使用几个变量 选择排序是在从未排序部分选择最小值,然后放在排序部分的尾部,逐渐将未排序部分缩小,最后变成排好序的
阅读全文
摘要:将搜索二叉树转换成双向链表 对于BST 来说,有本身的值域,有指向左孩子和右孩子的两个指针;对于双向链表来说,有本身的值域,有指向上一个节点和下一个节点的指针。将这个BST转换成双向链表,对于每一个节点来说,原来的right指针等价于转换后的next指针,原来的left指针等价于转换后的left指针
阅读全文
摘要:在单链表中删除指定值的节点 给定一个链表的头节点head和一个整数num,实现一个函数删除链表中值为num的所有节点。例如,链表为 1->2->3->4->null ,num 为3,删除后,链表变为 1->2->4->null。 【解析】 方法一:使用栈或者其他容器收集节点的方法,其时间复杂度是 O
阅读全文
摘要:删除无序单链表中值重复出现的节点 给定一个无序单链表的头节点head,删除其中值重复的节点 例如: 1->2->3->3->4->4->2->1->1->null 删除之后变为 1->2->3->4->null 方法1:如果链表长度为N,时间复杂度达到O(N) 方法2:如果要求空间复杂度为O(1),
阅读全文
摘要:将单链表的每K个节点之间逆序 给定一个单链表的头节点head,实现一个调整链表的函数,使得每K 个节点之间逆序,如果最后剩下不够K 个节点,则不调整最后几个。 例如: 链表:1—>2—>3—>4—>5—>6—>7—>8—>null,k=3。 调整好后:3—>2—>1—>6—>5—>4—>7—>8—>
阅读全文
摘要:将单向链表按某值划分成左边小、中间相等、右边大的形式 给定一个单向链表的头节点head,节点的值类型是整数,再给定一个整数 pivot,实现一个调整链表的函数,使得左半部分的值都是小于pivot的节点,中间部分都是等于pivot的节点,右边部分都是大于pivot的节点,对于左半部分、中间、右半部分内
阅读全文
摘要:反转部分单向链表 给定一个单向链表的头节点head,以及反转的起始点from和终止点to ,将起始点和终止点中间的部分进行反转 例如 1->2->3->4->5->6, from为2, to为4,反转后的结果为 1->4->3->2->5->6。如果不满足 1 <= from <= to <= N,
阅读全文
摘要:删除链表的中间节点和a/b处的节点 对于给定一个链表的头节点head,实现删除链表的中间节点的函数。 例如 不删除任何节点; 1->2,删除节点1 1->2->3,删除节点2 1->2->3->4,删除节点2 1->2->3->4->5,删除节点3 如果将本问题复杂一下,给定链表的头节点head、整
阅读全文
摘要:在单链表和双链表中删除倒数第K个节点 分别实现两个函数,一个可以删除单链表中的倒数第K个节点,一个可以删除双链表中的倒数第k 个节点,要求时间复杂度是 O(N),空间复杂度是 O(1)。 【解析】 基本思路: 让链表从头开始走到尾,每移动一步,就让k值减一,当k 值走到结尾时, 如果k 值大于0,说
阅读全文
摘要:最大值减去最小值小于等于num的子数组的数量 给定数组arr和整数 num,共返回有多少个数组满足下列情况: max(arr[i..j])-min(arr[i..j])<=num。其中max(arr[i..j]) 表示子数组arr[i..j] 中的最大值,min(arr[i..j]) 表示子数组ar
阅读全文
摘要:求最大子矩阵的大小 给定一个整型矩阵map,其中的值只有0,1两种,求全是1 的所有矩阵区域中,最大的矩形区域为1的数量。 例如: 1 1 1 0,其中最大的矩形区域有3个1,所以返回3 例如: 1 0 1 1 1 1 1 1 1 1 1 0 其中,最大的矩形区域有6个1,所以返回6 【解析】 首先
阅读全文
摘要:生成窗口的最大值数组 给定一个n个元素的整型数组arr,和一个大小为w的窗口,从数组的最左边移动到最右边,每次移动一个单位,一共产生n-w+1个窗口的最大值数组。 例如数组为[4,3,5,4,3,3,6,7],窗口大小为3时, [4 3 5] 4 3 3 6 7 窗口中最大值为5 4 [3 5 4]
阅读全文

浙公网安备 33010602011771号