Hulu面试题解答——N位数去除K个数字(解法错误sorry)

简介:

给定一个N位数,比如12345,从里面去掉k个数字。得到一个N-k位的数。比如去掉2,4,得到135,去掉1,5。得到234。设计算法。求出全部得到的N-k位数里面最小的那一个。

写的代码例如以下,思路是通过堆排序得到N位数里边最大的前K个数,然后依照原数字的顺序去除得到的最大的K个数。

感觉写的非常乱,可能还有些小问题,鲁棒性应该非常差,努力锻炼。。努力提高。

typedef unsigned int uint;
//Heap adjust function
void HeapAdjust(uint *value, uint start, uint end)
{
	for( int i=start; 2*i<=end; )
	{
		uint index = 2*i;
		if(index+1<=end && value[index+1] > value[index])
			index +=1;
		if(value[index] > value[i])
		{
			uint temp = value[i];
			value[i] = value[index];
			value[index] = temp;
		}
			i = index;
	}
}
//Heap creation function
void CreateHeap(uint *value, uint start, uint end)
{
	uint middle = (start+end)/2;
	for( uint i = middle;i>=start;i--)
	{
		HeapAdjust(value, i, end);
	}
}
//Kick K numbers from N
uint KickK(uint N, uint K)
{
	if(N>4294967295)
		return 0;
	uint i,tempN=N;
	uint length=0;
	uint value[10],outValue[10];
	bool flag;
	i = 1;
	//get the numbers of N 
	while(tempN != 0)
	{
		value[i]=tempN%10;
		outValue[i]=value[i];
		tempN=tempN/10;
		i++;
	}
	length = i-1;
	//check the condition
	if(K >= length)
		return 0;
	//Get the K biggest numbers, and store then in the last K positions in array value
	CreateHeap(value,1,length);
	for(i=0;i<K;i++)
	{
		uint temp = value[length-i];
		value[length-i] = value[1];
		value[1] = temp;
		CreateHeap(value,1,length-i-1);
	}
	//output the remained numbers ,despite the K biggest numbers
	for(i=length;i>=1;i--)
	{
		flag = true;
		for(uint j=length+1-K;j<=length; j++)
		{
			if(outValue[i] == value[j])
				flag = false;
		}
		if(flag)
			printf("%d", outValue[i]);
	}
	return 1;
}

int main()
{
	uint N=61829;
	uint K=3;
	KickK(N,K);
}








本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5083607.html,如需转载请自行联系原作者


相关文章
|
2月前
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
21 0
【变态面试题】【两种解法】不能创建临时变量(第三个变量),实现两个数的交换
|
2月前
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
【一刷《剑指Offer》】面试题 12:打印 1 到最大的 n 位数
|
2月前
剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
剑指Offer LeetCode 面试题17. 打印从1到最大的n位数
29 0
|
12月前
|
算法
(C语言版)力扣(LeetCode)面试题 17.04. 消失的数字5种解法
数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?
|
存储
剑指Offer - 面试题17:打印从1到最大的n位数
剑指Offer - 面试题17:打印从1到最大的n位数
57 0
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
【基础算法】单链表的OJ练习(5) # 环形链表 # 环形链表II # 对环形链表II的解法给出证明(面试常问到)
|
算法 C++
【每日算法Day 76】经典面试题:中序遍历的下一个元素,5大解法汇总!
【每日算法Day 76】经典面试题:中序遍历的下一个元素,5大解法汇总!
|
算法 C++
【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法
【每日算法Day 71】面试官想考我这道位运算题,结果我给出了三种解法
|
Rust 算法 JavaScript
阿里巴巴的算法面试题JAVA,python,go,rust js解法大全
阿里巴巴的算法面试题JAVA,python,go,rust js解法大全
141 0
|
存储 Rust JavaScript
2023java面试算法真题 python go rust js 解法
2023java面试算法真题 python go rust js 解法
103 0