算法_已知五个>=0的自然数,随机输入5个数,编写算法判断是否能排列成有序的数字。0可以替换成任何数
2014-12-08 08:47
525 查看
一、问题举例:
例1:5、2、4、3、1,是有序递加1的。(成立)
例2:2、0、1、4、5,可以用0代替3。(成立)
例3:1、4、9、2、4,有重复值4,而且不可能排列成有序递加1的数组(不成立)
二、核心思路:
1、去重:通过Set集合,如果重复添加相同的值会返回false。
2、差值:如果是有序的递加1关系,那么最大值与最小值差值一定是四,可以遍历找到最大值最小值对差比较。
三、java参考代码:
例1:5、2、4、3、1,是有序递加1的。(成立)
例2:2、0、1、4、5,可以用0代替3。(成立)
例3:1、4、9、2、4,有重复值4,而且不可能排列成有序递加1的数组(不成立)
二、核心思路:
1、去重:通过Set集合,如果重复添加相同的值会返回false。
2、差值:如果是有序的递加1关系,那么最大值与最小值差值一定是四,可以遍历找到最大值最小值对差比较。
三、java参考代码:
import java.util.HashSet; import java.util.Set; /** * @author 仲丛旭 * @date 2014/12/08 */ public class Test { <span style="white-space:pre"> </span>public static void main(String[] args) { <span style="white-space:pre"> </span>// /* 测试用例1:正常无0序列 */ <span style="white-space:pre"> </span>// int[] arr = { 1, 3, 2, 5, 4 }; <span style="white-space:pre"> </span>// /*测试用例2:正常有0序列*/ <span style="white-space:pre"> </span>// int[] arr = { 6, 8, 7, 0, 10 }; <span style="white-space:pre"> </span>// /* 测试用例3:有0,但差值大于4 */ <span style="white-space:pre"> </span>// int[] arr = { 0, 8, 6, 0, 11 }; <span style="white-space:pre"> </span>// /* 测试用例4:极端,都是0 */ <span style="white-space:pre"> </span>// int[] arr = { 0, 0, 0, 0, 0 }; <span style="white-space:pre"> </span>/* 测试用例5:极端,都是重复数 */ <span style="white-space:pre"> </span>int[] arr = { 2, 2, 2, 2, 2 }; <span style="white-space:pre"> </span>System.out.println(isLianxu(arr)); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>private static String isLianxu(int[] arr) { <span style="white-space:pre"> </span>Set<Integer> set = new HashSet<Integer>();// 判断是否有重复数的方法。 <span style="white-space:pre"> </span>int max = -1;// 1、不能从arr[0]开始,因为第一个数可能是0。例:{ 0, 8, 7, 0, 11 } <span style="white-space:pre"> </span>int min = -1; <span style="white-space:pre"> </span>boolean isFirst = true; <span style="white-space:pre"> </span>for (int i = 0; i < arr.length; i++) { <span style="white-space:pre"> </span>if (arr[i] == 0) { <span style="white-space:pre"> </span>continue;// 0可以替换成任何数,所以无用。 <span style="white-space:pre"> </span>} else if (isFirst) {// 第一个非零数为min与max初始最大值 <span style="white-space:pre"> </span>max = arr[i]; <span style="white-space:pre"> </span>min = arr[i]; <span style="white-space:pre"> </span>isFirst = false; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>/* 2、核心算法:最大值与最小值之差超过四,或者有非0的重复值则不连续 */ <span style="white-space:pre"> </span>if (max < arr[i]) { <span style="white-space:pre"> </span>max = arr[i]; <span style="white-space:pre"> </span>} else if (min > arr[i]) { <span style="white-space:pre"> </span>min = arr[i]; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>boolean flag = set.add(arr[i]);// 重复添加得到的值为false <span style="white-space:pre"> </span>// System.out.println(arr[i]); <span style="white-space:pre"> </span>// System.out.println("flag==" + flag + ",max - min-->" + (max - <span style="white-space:pre"> </span>// min)); <span style="white-space:pre"> </span>if (max - min > 4 || !flag) { <span style="white-space:pre"> </span>return "无法排列成继续"; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return "可以连续"; <span style="white-space:pre"> </span>} }
相关文章推荐
- 输入5个数字,如果数组中有0则0可以替代任何数字,判断该数组中的数字是否是连续数字。
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都
- 2. 编写一个Java应用程序,用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、32
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数, 并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同, 例如12121、3
- 一个正整数有可能可以表示为n(n>=2)个连续的正整数之和,如:15=1+2+3+4+5,15=4+5+6,15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
- java猜数字小游戏:任意输入数字,判断与系统随机产生数字是否相等。
- 编写程序,判断用户输入的数字是否完全数.所谓“完全数”是指整数n的所有因子(不包括n)之和等于n自身。例如28的因子为1、2、4、7、14,而28=1+2+4+7+14,因此28是“完全数”。
- iOS 判断输入框内容是否是数字,并可以时时判断输入内容是否符合金额形势
- C语言小算法集锦---判断输入的数字是否为回文数
- 已知一个矩阵 A(m*n) 的元素每行每列都按从小到大有序, 试设计一个算法判断任一给定值 k 是否在矩阵 A(m*n) 中
- 第二章作业51.4(编写一个程序,判断用户输入的字符是否为数字,若是数字,则输出“a numerical charater”,否则输出“other charater”。)
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- 输入一个数,把它作为一个串,判断其中是否包含长度>=2的相同子串,如 果包含,返回1,不包含,返回0
- JAVA--第十周作业编写之一个Teacher类负责给出算术题目,随机给出两个整数并进行运算,并判断回答者的答案是否正确;编写一个GUI类ComputerFrame,回答者可以通过GUI看到题目并给出
- Android中判断输入的字符串是否为数字,可以解决如输入为点出现的问题
- python键盘输入五个数字,判断是否是回文数
- 43.编写一个程序,判断用户输入的字符是否是数字,若是数字,则输出“a numerical character”
- 你可以输入一个五位以内的数字,我们将判断,该数字是几位数,并且判断其是否为回文数
- 算法实现将一个输入的数字颠倒(输入12345->54321)
- java算法程序题,输入三个数求哪个是最大数,先判断这三个数是否整数,不是就打印提示:请输入数字,若是就打印出那个最大数