
算法
yeluoweiluo615
Android 菜鸟一枚,认真学习中
展开
-
像素翻转
有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。 给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。 测试样例: [[1,2,3],[4,5,6],[7,8,9]],3 返回:[[7,4,1],[8,5,2],[9,6,3]]思路:转载 2016-05-27 15:53:11 · 257 阅读 · 0 评论 -
上楼梯---动态规划问题
题目描述: 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶、3阶。请实现一个方法,计算小孩有多少种上楼的方式。为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等于100000。 测试样例: 1 返回:1解题思路: 到达最后一节台阶,则有可能从第n-1阶也有可能从n-2阶也有可能从n-3原创 2016-11-24 11:25:30 · 1180 阅读 · 0 评论 -
快速排序的改进方法
参考:三种改进快排方法 我是看到算法书的课后题,要求改进快排,在线性表中的第一个元素、中间元素和最后元素中选择一个中位数作为主元/** * 关键:该算法在数组中选择一个称为主元的元素,将数组分为两部分; * 每次划分都将主元放在了恰当的位置 * 时间复杂度:O(nlogn) * @param list */ public static voi转载 2016-11-23 11:24:25 · 1001 阅读 · 0 评论 -
单链表排序---直插法
这道题的思路: (1)首先必须维护当前节点的前指针, (2)然后还要维护要插入的位置的前后指针, (3)每个要插入的节点都要从头开始比较。参考代码:public ListNode insertionSortList(ListNode head) { //维护插入位置, ListNode p = head; ListNode q = hea原创 2016-11-17 14:46:27 · 600 阅读 · 0 评论 -
链表A+B
声明:此题解题思路转自牛客网论坛,地址:牛客网难题论坛题目描述有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。 给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。 测试样例: {1,2,3},{3,2,1} 返回:{4,4,4}解题思路:本题的思路原创 2016-10-20 10:57:21 · 427 阅读 · 1 评论 -
单层输出节点
题目描述对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。 给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。**解题思路: 这个题目的意思就是输出二叉树的某一层的所有元素。用递归**public cl原创 2016-10-27 14:22:07 · 408 阅读 · 0 评论 -
檢查是否為BST
题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。 给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。思路: .已知中序遍历排序二叉查找树,得到的序列应是有序的。所以只要比较中序遍历的前一项和当前项就可以了。 方法一:public boolean checkBST(TreeNode root) { int min =原创 2016-11-07 11:15:04 · 315 阅读 · 0 评论 -
字符串翻转
参考:牛客网难题讨论 题目描述假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。 **解题思路: 以s原创 2016-10-26 10:15:58 · 254 阅读 · 0 评论 -
双栈排序
题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。 给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。 测试样例: [1,2,3,4,5] 返回:[5,4,3,2,1]**解题思原创 2016-10-24 14:32:12 · 252 阅读 · 0 评论 -
两个栈实现一个队列的push和pop
**题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。**思路:<分析>: 入队:将元素进栈A 出队:判断栈B是否为空,如果为空,则将栈A中所有元素pop,并push进栈B,栈B出栈; 如果不为空,栈B直接出栈。 用两个队列实现一个栈的功能?要求给出算法和思路!public void push(int node) { stack转载 2016-10-21 13:51:53 · 374 阅读 · 0 评论 -
奇偶位交换
请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好) 给定一个int x,请返回交换后的数int。 测试样例: 10 返回:5解题思路 让目标数&055555555,则保留目标数的偶数位,然后再左移(不能右移,因为最低位为0位,右移,最低位的数会被抹去补零,左移第30位到第31位没有信息丢失),同理目标数&0AAAAAAAA,奇数位保留,然后右移移位。之后把前两步的结果原创 2016-11-28 15:41:38 · 716 阅读 · 0 评论