随笔分类 - 数据结构与算法
摘要:题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). 第一种方法: 利用ASCII码用字符作为数组的下标索引存储,字符出现的次数即是对应索引的值,俩次循环,时间复杂度为O(n),最后做个判断即
阅读全文
posted @ 2018-08-18 09:55
Octopus22
摘要:题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1
阅读全文
摘要:题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路一: 设置一个新数组,该数组的下标是题目数组的中的元素 ,如下 1 int
阅读全文
摘要:题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 核心:利用中序遍历的结果有序的性质,遍历出有序的序列,然后对每个序列将left设置为前一个结点,将right设置为后一个结点 (重点掌握二叉树的遍历递归过程和步骤逻辑) 1
阅读全文
摘要:有股神吗? 有,小赛就是! 经过严密的计算,小赛买了一支股票,他知道从他买股票的那天开始,股票会有以下变化:第一天不变,以后涨一天,跌一天,涨两天,跌一天,涨三天,跌一天...依此类推。 为方便计算,假设每次涨和跌皆为1,股票初始单价也为1,请计算买股票的第n天每股股票值多少钱?
阅读全文
posted @ 2018-08-13 10:03
Octopus22
摘要:题目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路: 看到这一题的时候,不能使用乘除法和循环判断,当时就想到了使用二进制移位的方法,因为二进制不就只有加法操作,而且所有的计算在计算机里都是二进
阅读全文
posted @ 2018-08-11 23:31
Octopus22
摘要:题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) 1 public class TreeNode { 2 3 int val=0; 4
阅读全文
摘要:题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路: 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树
阅读全文
摘要:题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路: 路线层序遍历,方法广度优先搜索,工具队列 注意点:不同于C/C++,声明队列queue<TreeNode*> p; //队列里存放的是地址 java的queue是接口,需要通过其实现类来完成操作 注意: Queue 接口并未定
阅读全文
posted @ 2018-08-09 09:44
Octopus22
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 思路: 思路很明了,设置一个新结点,左右孩子交换,递归下去。 不需要想太多,即使左子树为空或右子树为空,只不过是将左子树的null 和右子树进行了交换而已,若当前结点为空,则return 结束该次递归。 /** public class Tre
阅读全文
posted @ 2018-08-08 09:21
Octopus22
摘要:题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路分析: 判定情况: 1:比较根的值,若相等一直比较下去 2:若根值不等,则比较A的左孩子和B的根 3:若根值和左孩子不等,则比较A的右孩子和B的根 比较方法: 1:若此时B为空,则说明B至少有一
阅读全文
posted @ 2018-08-08 09:11
Octopus22
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 1 public class Solution { 2 3 public ListNode ReverseList(ListNode head) { 4 ListNode pre = null; 5 ListNode next = null;
阅读全文
摘要:题目描述 输入一个链表,输出该链表中倒数第k个结点。 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 pu
阅读全文
posted @ 2018-08-06 20:23
Octopus22
摘要:题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 一:通过迭代乘积的方式 二:通过快速幂方法 快速幂就是快速算底数的
阅读全文
摘要:题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 方法一: 前偶后奇数就交换 1 public class Solution { 2 public void reOrde
阅读全文
posted @ 2018-08-06 14:13
Octopus22
摘要:题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路:在平时的学习中感受不到位运算的精妙,但是在一些算法处理和效率问题上位运算却提供了很好的解决方法,毕竟它是立足于二进制来处理数据的,最底层的也是效率最高的。 本题的考察重点也是位运算。 通过运算 & 与运算,每次循环 —
阅读全文
摘要:一.表示方法: 在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (1)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 二:位运算符 三:Java 中二进制的表示
阅读全文
摘要:题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? (本题思路搬运他人,自己在做这题时思路是想通过分而治之的思想解决的,因为当整个整体被分成n个分区的时候,即单位面积2*1,那么整个大的整体可以容纳多少个这样的单
阅读全文
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 个人思路分析: 青蛙只能选择跳一个台阶和跳俩个台阶,正着看比较复杂,我之前正着看用了俩层循环穷举排列解题,很多小错误。 接着通过画图找到了方法,我们可以从最后一步看起,到
阅读全文
摘要:题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 第一种方法f
阅读全文
浙公网安备 33010602011771号