关闭

求数字在非降序数组中出现的次数

题目描述:在一个非降序排列的数组中,找出数字target出现的次数。 非降序数组,比如{1,1,1,2,3,4,5,5,6}思路一:先通过二分查找,找到arr[index]等于target的index,在分别向前后遍历,直到arr[index] != target为止。 算法实现简单,但是当数组形如{x,x,...,x},此时查找x的时间复杂度就退化为线性的O(n).思路二:1. 首先通过二分查找,...
阅读(18) 评论(0)

第一次只出现一次的字符

题目描述一个字符串全部由字母组成,如果存在只出现一次的字符,则返回第一个字符的位置,如果不存在怎返回-1.思路:因为要寻找第一个只出现一次的字符,所以必须全部遍历,用某个数据结构保存每个位置字符的信息。第二次遍历要在该数据结构中查找值,并且是常熟时间,那么可以采用HashSet。 1. 先用一个HashSet保存字符串中所有的字符+去重; 2. 用第二个HashSet保存出现过多次的字符;代码如下:...
阅读(21) 评论(0)

丑数

这是剑指offer上的一道算法题:把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:比较容易想到的是,对于数组arr,某些位置t2,t3,t5的数分别乘以2,3,5以后取最小值即为下一个丑数。 比如: arr[0] = 1; 开始时,t2 = 0,t3 = 0, t5...
阅读(10) 评论(0)

求一个环内连续m个数的最大和

题目描述:有n个小朋友,围成一个圈,玩丢手绢的游戏。现输入一个数组表示每个小朋友被丢中的次数,同时输入一个整数m(1<=m<=n),求出连续m个小朋友被丢中次数的和的最大值。 示例:input: 5//数组大小n 1 2 3 4 5//数组的个元素值 3//连续m个小朋友 output: 12思路:思路还是比较简单的: 假定输入数组为arr,连续m个小朋友 1. 求出一个基本值sum,max fo...
阅读(38) 评论(0)

求出不超过n的幸运数

题目描述:对于某一个数m,如果它只包含数字4或者7(如44,47,77),我们称之为幸运数。现在输入一个自然数x,求出不超过x的幸运数的个数。 注意:结果可能非常大,请将答案除10^9+7取余数。思路一:1. 引入队列queue,开始时将4,7入队。 2. while(queue.peek() <= x) 则将queue头部元素top出队,并且将top*10+4和top*10+7入队...
阅读(28) 评论(0)

合并两棵二叉树

给定两棵任意的二叉树,将其合并,返回合并后的根节点。思路: 基于先序遍历,如果root1存在就和root2的val相加,如果root1不存在,就把root2的引用直接赋值给root1。代码如下:public class Main { public static void main(String args[]) { TreeNode root1 = new TreeNode(...
阅读(26) 评论(0)

一个字符串包含的所有回文串

题目描述:输入一个字符串str,输出str包含的所有回文串的个数。如ABA,包含的回文串有A,B,A,AA,ABA共5个。思路: 长度为N的str的不打乱原始顺序所有可能的字符子串个数为2^N个,再判定每一个子串是否是回文串。...
阅读(22) 评论(0)

可以回跳的台阶跳

题目一: 青蛙跳台阶有两种方式:一次跳1级,一次跳两级,问从0级阶梯跳到n级阶梯共有多少种方式?...
阅读(28) 评论(0)

判断某年月日是当年的第几天

题目描述: 输入三个整数year,month,day分别表示当前年月日,输出该天是当年的第几天思路: * 由于只有十二个月,所以可以枚举每个月的天数 * 需要单独考虑的是当前年份是否是闰年&&当前月份是否大月2月,如果都满足,则在总天数上+1...
阅读(88) 评论(0)

循环数组-找出最小值

今天面试遇到一个有意思的题,记录一下如下。题目一: 一个循环数组,数组中原始值按升序排列(假设所有值不相等),但是现在从某个位置截断,该位置后面的元素移动到数组的最前面,找出这样的数组的最小值。如 arr = { 1,2,3,4,5,6},移动后arr = {4,5,6,1,2,3},其中最小值为1....
阅读(32) 评论(0)

把数组排列成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。...
阅读(58) 评论(0)

二叉搜索树转化为双向链表

题目描述: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 思路一: 按中序遍历,借助中间队列用于存储树种的各个节点,然后遍历队列,给相邻节点建立关系; 思路二: 不引入新得变量。只能采用递归的方式: 假设root节点的左右子树已经是双向链表,那么只用将root和左右子树对应链表的最大值和最小值建立连接;...
阅读(34) 评论(0)

复杂链表的复制

题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的头结点。 思路: 1. 首先根据链表的next遍历一遍,在每个node节点的后面复制一个与node的label相等的节点,如图所示; 2. 再遍历新链表,为复制的节点指定random指针(黄色箭头所示); 3. 将新链表拆分=原链表+复制后的链表...
阅读(52) 评论(0)

二叉搜索树的后序遍历序列

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出true,否则输出false。假设输入的数组的任意两个数字都互不相同。首先:什么是二叉搜索树(Binary Search Tree)?...
阅读(57) 评论(0)

对象的复制:浅复制(clone()方法的使用)+深复制

首先需要了解对象深、浅复制的概念: 浅复制:将一个对象复制后,基本数据类型(如int,String,boolean)的变量都会重新创建,而引用类型,指向的还是原对象(或数组)所指向的。...
阅读(92) 评论(0)
27条 共2页1 2 下一页 尾页
    个人资料
    • 访问:1892次
    • 积分:275
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档