黑马程序员技术交流社区

标题: 【济南校区】JavaEE基础阶段必会案例NO.28-逆序对 [打印本页]

作者: 小鲁哥哥    时间: 2018-3-2 09:53
标题: 【济南校区】JavaEE基础阶段必会案例NO.28-逆序对
本帖最后由 小鲁哥哥 于 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 = num;
               
}
                //遍历数组找出符合要求的逆序对总数
                int count = 0;
                for (int i = 0; i < arr.length; i++) {
                        for (int j = 0; j < arr.length; j++) {
                                if(i<j && arr>arr[j]){
                                        System.out.println("逆序对:"+arr+" "+arr[j]);
                                        count++;
                                }
                        }
                }
                System.out.println("共有"+count+"对");
        }
}

ok!大工告成!!
运行结果没有问题
好了,希望通过这个案例大家对于数组相关的知识更加熟悉,如果再遇到相关的题目可以自己完成!现在把这个案例多敲几遍吧!
   其实,每个案例都有很多种写法,不同的人可能有不同的思路。黑马程序员训练营也是非常鼓励大家开动脑筋积极思考的。
      做完了这个题,离你走上人生巅峰又近了一步,继续加油吧!骚年!  

      点进这个帖子的同学肯定是要奋发图强,学技术拿高薪的有志青年,这里我看你骨骼惊奇,是个绝世的练武奇才,你我有缘,今天我就把这个武林秘籍如来神掌传授于你! 什么?不想学如来神掌?不要紧!这里有各个门派的武林绝学,链接拿好!!哈哈哈哈


作者: Yin灬Yan    时间: 2018-3-3 20:38
我来占层楼啊   
作者: 小鲁哥哥    时间: 2018-3-9 13:44
Yin灬Yan 发表于 2018-3-3 20:38
我来占层楼啊






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2