标签:ber solution 数组 排序数组 root 字符 min rom 结果
22--从上往下打印出二叉树的每个节点,同层节点从左至右打印。
function PrintFromTopToBottom(root) { //广度遍历,先进先出,利用队列实现;深度遍历,后进先出,利用栈实现
var queue = []; //新建一个空队列
queue.push(root); //将二叉树的根push进队列
var result = []; //定义一个结果数组
if (root == null) { //如果二叉树不存在,直接返回result
return result;
}
while (queue.length) { //当队列不为空的情况下
var temp = queue.shift(); //把队列中的第一个元素删除,并返回其值
result.push(temp.val); //将队列中的第一个元素push进result
if (temp.left) { //根节点的左子树,push进队列
queue.push(temp.left);
}
if (temp.right) { //根节点的右子树,push进队列
queue.push(temp.right);
}
}
return result;
}
28--数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
function getExpend(numbers){
var mp={}
for(var index in numbers){ //遍历numbers数组
if(!mp[numbers[index]]){ //如果numbers中的值不在mp中的话,将mp[numbers[index]]置为1,
// 即将numbers中的value放在mp中作key使用,然后其mp中的value为对应mp中key的个数
mp[numbers[index]]=1
}else{ //如果numbers中的值在mp中的话,将mp[numbers[index]]++,即将mp中对应key的个数加1
mp[numbers[index]]++
}
}
for(var key in mp){ //遍历mp,mp中的key为numbers中的value,mp中的value为其个数
if(mp[key]>numbers.length/2){
return key
}
}
return 0
}
console.log(getExpend([1,2,3,2,2,2,5,4,2]))
29--输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
function GetLeastNumbers_Solution(input, k)
{
if(input.length < k) {
return false;
}
input.sort(function(a,b){
return a-b;
}
);
return input.slice(0,k);
}
33--把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
function Ugly(numbers){ //判断丑数
while(numbers){
if(numbers%5==0){
numbers/=5
}else if(numbers%3==0){
numbers/=3
}else if(numbers%2==0){
numbers/=2
}else if(numbers==1){
return true
}else{ //这里,表明除完5、3、2后剩下的因子不为1,则表示还有其他因子存在,因此,不是丑数
return false
}
}
}
function getNUgly(n){
var count=1 //用来统计第几个丑数
var num = 1 //用来表示第几个丑数对应的值
while(count<=n){
if(Ugly(num++)){
count++;
}
}
return --num
}
console.log(getNUgly(7))
34--在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
function FirstNotRepeatingChar(str)
{
// write code here
var mp = {}
for (var index in str) { //遍历numbers数组
if (!mp[str[index]]) { //如果numbers中的值不在mp中的话,将mp[numbers[index]]置为1,
// 即将numbers中的value放在mp中作key使用,然后其mp中的value为对应mp中key的个数
mp[str[index]] = 1
} else { //如果numbers中的值在mp中的话,将mp[numbers[index]]++,即将mp中对应key的个数加1
mp[str[index]]++
}
}
for(var index in str){
if(mp[str[index]]==1){
return index;
}
}
return -1;
}
37--统计一个数字在排序数组中出现的次数。
function getCount(arr,k){
var mp={}; //定义一个mp对象
for(var index in arr){
//遍历arr,若arr中的数据不在mp中,则将其放进mp中,mp中其对应value为1
if(!mp[arr[index]]){
mp[arr[index]]=1;
}else{
mp[arr[index]]++;
//遍历arr,若arr中的数据在mp中,则将其放进mp中,mp中其对应value加1,该值对应的个数
}
}
return mp[k]?mp[k]:0 //存在k返回个数,不存在则返回0
}
console.log(getCount([1,3,5,6,7,8,3,8,8],8));
console.log(getCount([1,3,5,6,7,8,3,8,8]s,9));
40--一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
function searchNum(data){
var mp={};
for(var index in data){
if(!mp[data[index]]){
mp[data[index]]=1;
}else{
mp[data[index]]++
}
}
var arr=[];
for(var key in mp){ //将个数为1的元素存在一个数组中,并返回即可
if(mp[key]==1){
arr.push(key)
//console.log(key);
}
}
return arr;
}
console.log(searchNum([1,2,3,4,5,4,5,3,6,6]));
42--输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
function FindNumbersWithSum(array, sum)
{
var len=array.length;
var begin=0;
var end=len-1;
var s =Math.pow(2,31)
var beginmin = 0
var endmin=0
while(begin<end){ //前后一起推进,计算,大于sum,end向前,小于sum,begin向后
if(array[begin]+array[end]>sum){
end--;
}else if(array[begin]+array[end]<sum){
begin++;
}else{ //找到一对,继续遍历,看是否还存在满足条件的
if(s>array[begin]*array[end]){
s=array[begin]*array[end]
beginmin = array[begin]
endmin=array[end]
}
begin++;
end--;
}
}
if(s == Math.pow(2,31)){ //这里s值没变,即表示没有找到满足条件的,返回空
return []
}
return [beginmin,endmin]
}
标签:ber solution 数组 排序数组 root 字符 min rom 结果
原文地址:http://www.cnblogs.com/haimengqingyuan/p/6927201.html