摘要:
Problem: 两个单链表相交的一系列问题 【题目】 在本题中,单链表可能有环,也可能无环。给定两个 单链表的头节点 head1和head2,这两个链表可能相交,也可能 不相交。请实现一个函数, 如果两个链表相交,请返回相交的 第一个节点;如果不相交,返回null 即可。 要求: 如果链表1 的长 阅读全文
摘要:
Problem: 【题目】 给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。 实现一个调整链表的函数,将链表调整为左部分都是值小于 pivot的节点, 中间部分都是值等于pivot的节点,右部分都是值大于 pivot的节点。 除这个要求外,对调整后的节点顺序没有更多的 阅读全文
摘要:
Problem: 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一 列都是排好序的。实现一个函数, 判断K是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返回false。 阅读全文
摘要:
Problem: “之”字形打印矩阵【题目】 给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵, 例如: 1 2 3 4 5 6 7 8 9 10 11 12 “之”字形打印的结果为:1,2,5,9,6,3,4,7,10,11,8,12 【要求】 额外空间复杂度为O(1) Solution 阅读全文
摘要:
Problem: 反转单向和双向链表 【题目】 分别实现反转单向链表和反转双向链表的函数。 【要求】 如果链表长度为N,时间复杂度要求为O(N),额外空间 复杂度要求为O(1) Solution: 学会使用指针 Code: 阅读全文
摘要:
Problem: 旋转正方形矩阵【题目】 给定一个整型正方形矩阵matrix, 请把该矩阵调整成顺时针旋转90度的样子。 【要求】 额外空间复杂度为O(1). Solution: 同样,采用由外向内一圈一圈变换,找到元素变换位置的规律即可。 难点在于区分偶数维矩阵和奇数维矩阵的不同操作 Code: 阅读全文
摘要:
Problem: 【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。 例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10 【要求】 额外空间复杂度为O(1)。 阅读全文
摘要:
Problem: 如何仅用队列结构实现栈结构? Solution: 队列是先进先出,而栈是先进后出 故使用两个队列来实现一个栈的功能 一个存放原来的数据, 另一个做数据倒腾的容器 Code: Problem2: 如何仅用栈结构实现队列结构? 解题思路: 同样的,使用两个栈Data,Temp来实现列表 阅读全文
摘要:
题目描述: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 【要求】 1.pop、push、getMin操作的时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。 解题思路: 使用一个辅助栈,里面存的目前栈中的最小值 代码实现: 阅读全文
摘要:
题目描述: Problem 1: 用数组结构实现大小固定的栈 解题思路: 给定一个指针即可实现。 代码实现: Problem2: 使用数组实现队列和 解题思路: 使用两个指针分别指向队列的前和尾: 代码实现: 测试代码: 阅读全文
摘要:
题目描述: 不使用比较排序,实现一个数组排序 时间复杂度O(N),额外空间复杂度O(N) 解题思路: 使用桶排序思维,申请一个额外数组,叫桶,用来记录数字出现的次数,然后输出即可,但桶排序一般适用于0-9的元素数字排序,因为此时桶只需申请0-9的空间,若array元素为999,则桶的空间至少得申请0 阅读全文
摘要:
题目描述: 给定一个数组arr,和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。要求额外空间复杂度O(1),时间复杂度O(N) 解题思路: 使用两个指针:p1,p2 p1 = -1; //左指针,在p1左边并含p1的所有数都<num p2 阅读全文