算法_已知五个>=0的自然数,随机输入5个数,编写算法判断是否能排列成有序的数字。0可以替换成任何数
来源:互联网 发布:代尔塔劳保鞋淘宝 编辑:程序博客网 时间:2024/05/22 17:04
一、问题举例:
例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>}}
0 0
- 算法_已知五个>=0的自然数,随机输入5个数,编写算法判断是否能排列成有序的数字。0可以替换成任何数
- 每日一道算法题:Google面试题:判断一个自然数是否是某个数的平方
- 学会利用java程序编写“随机输入三角形的三边,判断是否能构成三角形“
- 输入5个数字,如果数组中有0则0可以替代任何数字,判断该数组中的数字是否是连续数字。
- 数据结构_递归算法的应用_打印n个数的全排列数
- 判断一个自然数是否为质数的算法
- java判断输入的是否是自然数
- 判断输入一个数是否为素数的一般算法
- 【算法】判断输入是否是树的子数
- 编写程序:随机生成一个5位以上的数,将生成数的各位数字重新排列成一个与原整数相同的最小整数
- 判断输入的数字是否为 水仙花数 或阿姆斯特朗数
- 关于 高斯算法计算某数可以被分割成连续自然数之和的组数 个人的一点拙见
- 判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方
- 谷歌:判断一个自然数是否是某个数的平方
- 判断一个自然数是否是某个数的平方
- 字符串匹配算法(二)
- PHPCMS V9上传附件图片出现“服务器安全认证错误”解决方法
- Alamofire网络库基础教程:使用 Alamofire 轻松实现 Swift 网络请求
- OpenCV2.4.9新版本使用问题---sift,surf无法使用
- ubuntu14.04创建桌面快捷方式
- 算法_已知五个>=0的自然数,随机输入5个数,编写算法判断是否能排列成有序的数字。0可以替换成任何数
- 一些认识
- 第14章 事务
- CPU GPR与CP0寄存器汇编宏函数-读写
- 五种Java设计模式透析
- ArcGIS Server GP服务使用常见错误总结
- 在VS2012中实现Ext JS的智能提示
- 小m的区间公约数
- javascript之cookie对象