本帖最后由 小鲁哥哥 于 2018-3-2 14:08 编辑
【济南校区】JavaEE基础阶段必会案例NO.28-逆序对
黑马程序员课程内容丰富多样,每个知识点我们都设计有新奇的案例让大家练习。黑马程序员训练营的课程也是案例驱动教学,每天都会进行大量的代码练习。今天我们就来一起做一个基础第一阶段第9天的一个小案例。会用到数组相关知识,有疑问的可以留言哦~ 求出数组中的逆序对有几个? 什么叫逆序对?
例如一组数:1 2 4 3 5 ,这里4这个数字的索引比3的索引小但是值比后面的大,这就是一个逆序对
这里要求,键盘录入数据的个数,范围为2-100000,其中每个数字不能大于10的9次方
好,我们开始按步骤写代码吧~
第一步我们先输入数据的个数,并判断这个数是否合理。
第二步,我们根据输入的数字,创建相应长度的数组,并往里添加数据。
接下来是我们的重头戏了,我们把这个数组中的逆序对求出来,其实搞明白了逆序对的概念就很好做了,a和b相比 索引小,值大就是逆序对。
[Java] 纯文本查看 复制代码 import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//键盘录入整数
Scanner sc = new Scanner(System.in);
System.out.println("请输入数组中元素个数:");
int n = sc.nextInt();
//判断n在2 到100000之间
while(true){
if(n<2 || n>100000){
System.out.println("对不起请重新输入n个数(2-100000)");
n = sc.nextInt();
}else{
break;
}
}
//创建相应长度的数组:
int[] arr = new int[n];
//接收元素,放入数组
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第"+(i+1)+"个元素:");
int num = sc.nextInt();
//判断元素的大小符合要求,然后存入数组
if(num>Math.pow(10, 9)){
i--;
System.out.println("数字太大了!");
continue;
}
arr[i] = num;
[/i] }
//遍历数组找出符合要求的逆序对总数
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
[i] if(i<j && arr>arr[j]){
System.out.println("逆序对:"+arr+" "+arr[j]);
count++;
}
}
}
System.out.println("共有"+count+"对");
}
}
ok!大工告成!!
运行结果没有问题
好了,希望通过这个案例大家对于数组相关的知识更加熟悉,如果再遇到相关的题目可以自己完成!现在把这个案例多敲几遍吧! 其实,每个案例都有很多种写法,不同的人可能有不同的思路。黑马程序员训练营也是非常鼓励大家开动脑筋积极思考的。
做完了这个题,离你走上人生巅峰又近了一步,继续加油吧!骚年!
点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈
|