题目是这样的:给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排对应那个数在下排十个数中出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
题目是这样的:给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排对应那个数在下排十个数中出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】
JavaEye论坛里面有人给出了一个java实现的算法。
Java代码
public class Test
{
public static void main(String[] args)
{
NumberTB nTB = new NumberTB(10);
int[] result = nTB.getBottom();
for(int i=0;i<result.length;i++)
{
System.out.print(result[i] + " ");
}
}
}
class NumberTB
{
private int[] top;
private int[] bottom;
private int len;
private boolean success;
//please into len >= 4
public NumberTB(int len)
{
this.len = len <= 4 ? 4 : len;
this.success = false;
this.top = new int[this.len];
this.bottom = new int[this.len];
//format top
for(int i=0;i<this.len;i++)
{
this.top[i] = i;
}
}
public int[] getBottom()
{
int i = 0;
while(!this.success)
{
i++;
setNextBottom();
}
System.out.println("执行了: " + i + "次循环得到结果");
return this.bottom;
}
//set next bottom
private void setNextBottom()
{
boolean reB = true;
for(int i=0;i<this.len;i++)
{
int frequecy = getFrequecy(i);
if(this.bottom[i] != frequecy)
{
this.bottom[i] = frequecy;
reB = false;
}
}
this.success = reB;
}
//get frequency in bottom
private int getFrequecy(int num)
{
int count = 0;
for(int i=0;i<this.len;i++)
{
if(this.bottom[i] == num)
count++;
}
return count;
}
}
public class Test
{
public static void main(String[] args)
{
NumberTB nTB = new NumberTB(10);
int[] result = nTB.getBottom();
for(int i=0;i<result.length;i++)
{
System.out.print(result[i] + " ");
}
}
}
class NumberTB
{
private int[] top;
private int[] bottom;
private int len;
private boolean success;
//please into len >= 4
public NumberTB(int len)
{
this.len = len <= 4 ? 4 : len;
this.success = false;
this.top = new int[this.len];
this.bottom = new int[this.len];
//format top
for(int i=0;i<this.len;i++)
{
this.top[i] = i;
}
}
public int[] getBottom()
{
int i = 0;
while(!this.success)
{
i++;
setNextBottom();
}
System.out.println("执行了: " + i + "次循环得到结果");
return this.bottom;
}
//set next bottom
private void setNextBottom()
{
boolean reB = true;
for(int i=0;i<this.len;i++)
{
int frequecy = getFrequecy(i);
if(this.bottom[i] != frequecy)
{
this.bottom[i] = frequecy;
reB = false;
}
}
this.success = reB;
}
//get frequency in bottom
private int getFrequecy(int num)
{
int count = 0;
for(int i=0;i<this.len;i++)
{
if(this.bottom[i] == num)
count++;
}
return count;
}
} 下面给出一个更具一般性的结论:
这个是有规律可循的,不仅0~9有唯一解,0~n都只有唯一解。关键是最后面一个1它可以左右移动,1和2下面的数永远是2和1,0下面对应的数为n-3(n>=3),上排数n-3下面对应的数为1,其它上排数下面对应为0就ok了。有了这个一般性的结论再大的数都可以马上给出答案。
比如 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
12 2 1 0 0 0 0 0 0 0 0 0 1 0 0 0
请大家验证,这个算法可以用到数据压缩领域。
本篇文章来源于:网贝建站 http://www.netbei.com 原文链接:http://www.netbei.com/2009/0619/6657.html
分享到:
相关推荐
标题中的“一道算法题,亏在二叉树的构造和递归算法上了”暗示了这个问题主要涉及计算机科学中的数据结构,特别是二叉树,以及使用递归算法解决相关问题。在编程领域,二叉树是一种基础且重要的数据结构,常用于实现...
贪心算法 每天一道算法题:分治算法,回归算法,贪心算法,回溯算法.zip
### hadoop2面试题 - 2012腾讯笔试的一道算法题 #### 背景与题目概述 本文档提供了2012年腾讯笔试中一道关于字符串处理的算法题,该题目要求将字符串中的所有大写字母移动到字符串的末尾,同时保持其他字符的相对...
board=Algorithm&gid=8898发信人: snoowball (Snowball), 信区: Algorithm标 题: Re: 问一道算法题
说实话,一天做完一道算法题还是很吃力的,并且每个人都自己的规划和任务,也不是都有时间刷题。所以,大家可以根据具体情况来安排个人时间,有时间了多做一些,没时间就少做或不做。 目前构想的题目知识模块有:
在准备面试时,掌握一些常见的算法题是至关重要的,尤其是对于技术面试来说。这份压缩包“考试类精品--总结一下面试常考的算法题”显然为面试者提供了一个宝贵的资源,帮助他们提升自身的编程和算法解决能力。在这个...
每天一道算法题 为了应付面试,开始写博客,准备开三个系列,第一个 JS算法系列,主要整理一些面试过程中常见的算法题 ; 第二个 ECMAScript规范解析,主要是想从ES规范的角度来解析JS代码的实际执行过程,只有真正...
详细解析与解答:对于每一道算法题,提供清晰、详尽的解题思路、代码实现以及时间复杂度分析是非常重要的。这不仅能帮助用户理解问题本质,还能学习到高效的解决策略。 互动学习平台:一些资源还提供了在线的编程...
12-02-28网易笔试一道算法题,附件代码是我自己的解题
这个问题是去哪儿网2014年笔试中的一道算法题,其目标是编写一个函数`RP2AP`,接收一个相对路径字符串作为输入,并返回其对应的绝对路径。 该函数的核心逻辑如下: 1. 首先,检查输入和输出指针是否为NULL,如果...
每日一道算法题 2021-1-16, 阅读【算法图解】,刷一道二分查找的题目,. 2021-2-8,Leetcode,题号15,刷一道数组的题目,. 2020-2-17,Leetcode,题号16,刷一道数组的题目, 2020-2-18,Leetcode,题号18,刷一道...
描述中的“AlgorithmSet”和“每天一道算法题”表明这是一个系统化的算法学习资源,可能是某个开源项目或者学习计划,旨在帮助用户通过每天解决一道算法题来提升自己的编程和算法能力。"Algorithm.playground"可能是...
【标题】"YunDang-Algorithm:群策群力,每日解决一道算法题" 提供了一个关于算法学习和实践的项目,旨在帮助开发者通过每天解决一个算法问题来提升自己的编程技能。该项目的核心理念是集体智慧,鼓励团队成员共同...
LeetCode Everyday项目就是这样一个极好的资源,它鼓励开发者每天都解决一道算法题,以此来保持对编程的热情和敏锐度。这个项目不仅局限于LeetCode上的题目,而是涵盖了更广泛的算法题目,帮助程序员拓宽视野,深入...
坚持每天刷一道算法题,冲鸭!!! day1 验证回文字符串 day2 亲密字符串 柠檬水找零 day3 反转字符串中的单词 day4 三数之和 day5 数组中的第k个最大元素 day6 环形链表II day7 无重复字符的最长子串 day8 排序链表...
Code4God:微信平台一天一道算法题的服务器源码,部署在百度云