剑指offer数组相关(javascript)

39.数组中出现超过一半的数字

function MoreHalfNum(arr){
	if(arr.length<1)
		return 0;
	var result=arr[0],num=1;
	for(let i=1;i<arr.length;i++){
		if(num==0){
			result=arr[i];
		}else if(arr[i]==result){
			num++;
		}else{
			num--;
		}
	}
	var times;
	for(let j=1;j<arr.length;j++){
		if(arr[j]=result){
			times++;
		}
	}
	if(times<Math.floor(arr.length/2))
		return 0;
	return result;
}
var arr1=[1,2,3,2,2,2,5,4,2];
console.log(MoreHalfNum(arr1));

40.最小的个数

function partition(arr,start,end){
	if(arr.length<1||start<0||end>=arr.length)
		console.log("Invalid");
	var index=Math.floor(Math.random()*(end-start+1));
	[arr[index],arr[end]]=[arr[end],arr[index]];
	var small=start-1;
	for(var index=start;index<end;++index){
		if(arr[index]<arr[end]){
			++small;
			if(small!=index){
				[arr[small],arr[index]]=[arr[index],arr[small]];
			}
		}
	}
	++small;
	[arr[small],arr[end]]=[arr[end],arr[small]];
	return small;
}
function GetNum(arr,k){
	if(arr.length<1)
		return;
	var start=0,end=arr.length-1;
	var index=partition(arr,start,end);
	while(index!=k-1){
		if(index>k-1){
			end=index-1;
			index=partition(arr,start,end);
		}else{
			start=index+1;
			index=partition(arr,start,end);
		}
	}
	for(var i=0;i<k;i++){
		console.log(arr[i]);
	}
}
var arr=[5,3,7,2,9,0,5,6,4,8,2];
GetNum(arr,3);

42.连续子数组的最大和

function findAdd(arr){
	if(arr.length<1)
		return;
	var result=0,startNum=arr[0];
	for(var i=0;i<arr.length;i++){
		if(result<=0){
			result=arr[i];
		}else{
			result+=arr[i];
		}
		if(result>startNum){
			startNum=result;
		}
	}
	return startNum;
}
arr=[1,-2,3,10,-4,7,2,-5];
console.log(findAdd(arr));

43.1-n整数中1出现的次数

function NumberOf1Between1AndN(n){
	if(n<0) return 0;
	var high,low,cur,i=1;
	high=n;
	var count=0;
	while(high!==0){
		high=parseInt(n/Math.pow(10,i));
		temp=n%Math.pow(10,i);
		cur=parseInt(temp/Math.pow(10,i-1));
		low=temp%Math.pow(10,i-1);
		if(cur===1){
			count+=high*Math.pow(10,i-1)+low+1;
		}else if(cur<1){
			count+=high*Math.pow(10,i-1);
		}else{
			count+=(high+1)*Math.pow(10,i-1);
		}
		i++;
	}
	return count;
}
console.log(NumberOf1Between1AndN(23));

44.数字序列中某一位的数字

function printMinNumber(arr){
	if(arr.length<1)
		return "";
	var newArr=[];
	for(var i=0;i<arr.length;i++){
		newArr.push(arr[i]+"");
	}
	newArr.sort((a,b)=>{
		return a+b>b+a?1:0;
	});
	console.log(newArr);
	var result="";
	for(var j=0;j<newArr.length;j++){
		result+=newArr[j];
	}
	return result;
}
console.log(printMinNumber([1,3,32,321]));

猜你喜欢

转载自blog.csdn.net/qq_41805715/article/details/87723044