找落单筷子的长度(数组,排序,java算法)

简介: 找落单筷子的长度(数组,排序,java算法)

找落单筷子的长度(数组,排序,java算法)


题目描述

经过一段时间的紧张筹备,电脑小组的“RP 餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题:筷子!

CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷子的长度吗?

输入格式

第一行是一个整数,表示筷子的数量 n。

第二行有 n 个整数,第 ii 个整数表示第 ii 根筷子的长度 a_ia

i 。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入

9

2 2 1 3 3 3 2 3 1

输出

2

提示

请注意数据读入对程序效率造成的影响。

请注意本题的空间限制为 44 Mb。

现在开始上代码

package cn.itcast.algorithm.TTT_64;
import java.util.Arrays;
import java.util.Scanner;
public class Main71 {
    public static void main(String[] args) {
        //这两组为测试用例
//       int n = 7;
//       int[] nteam = {2, 2 ,1 ,3 ,3 ,3 ,1};     
//        int n = 9;
//        int[] nteam = {2, 2 ,1 ,2 ,3 ,3 ,3 ,3 ,1};
        Scanner sc = new Scanner(System.in); //开始输入有多少根筷子和每根筷子的长度
        int n = sc.nextInt();
        int[] nteam = new int[n];
        for (int j = 0;j < n;++j){
            nteam[j] = sc.nextInt();
        }
       int chang = zhaoKuaizi(n,nteam);//找出落单的筷子
       System.out.println("落单筷子的长度为:" + chang);
    }
    /**
     *找单个是利用数组排序好之后的落单不成对
     */
    private static int zhaoKuaizi(int n, int[] nteam) {
        int l = nteam.length;
        paixu(nteam);
        int m = 0;
        int i = 0;
        while(i < l){
            if(i == l-1){
                m = l-1;
                break;
            }
            if (nteam[i] == nteam[i+1]){
                i += 2;
            }else{
                m = i;
                break;
            }
        }
        return nteam[m];
    }
    /**
     * 对数组进行由大到小的排序
     *          如果怕麻烦可以用封装好的Arrays.sort();对数组进行排序
     */
    private static int[] paixu(int[] nums) {
        int max = Arrays.stream(nums).max().getAsInt();
        int min = Arrays.stream(nums).min().getAsInt();
        int[] arr = new int[max - min + 1];
        for (int num : nums) {
            arr[num - min]++;
        }
        int index = 0;
        for (int i = 0; i < nums.length; ) {
            if (arr[index] == 0) {
                index++;
                continue;
            }
            for (int j = 0; j < arr[index]; j++) {
                nums[i++] = index + min;
            }
            index++;
        }
        return nums;
    }
}
相关文章
|
3月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鲸鱼优化算法NSWOA与多目标螳螂搜索算法MOMSA求解无人机三维路径规划研究(Matlab代码实现)
229 5
|
3月前
|
机器学习/深度学习 运维 算法
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
267 0
基于非支配排序遗传算法NSGAII的综合能源优化调度(Matlab代码实现)
|
3月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】多目标螳螂搜索算法MOMSA与非支配排序的鲸鱼优化算法NSWOA求解无人机三维路径规划研究(Matlab代码实现)
183 0
|
2月前
|
设计模式 算法 搜索推荐
Java 设计模式之策略模式:灵活切换算法的艺术
策略模式通过封装不同算法并实现灵活切换,将算法与使用解耦。以支付为例,微信、支付宝等支付方式作为独立策略,购物车根据选择调用对应支付逻辑,提升代码可维护性与扩展性,避免冗长条件判断,符合开闭原则。
388 35
|
2月前
|
存储 算法 搜索推荐
《数据之美》:Java数据结构与算法精要
本系列深入探讨数据结构与算法的核心原理及Java实现,涵盖线性与非线性结构、常用算法分类、复杂度分析及集合框架应用,助你提升程序效率,掌握编程底层逻辑。
|
2月前
|
存储 人工智能 算法
从零掌握贪心算法Java版:LeetCode 10题实战解析(上)
在算法世界里,有一种思想如同生活中的"见好就收"——每次做出当前看来最优的选择,寄希望于通过局部最优达成全局最优。这种思想就是贪心算法,它以其简洁高效的特点,成为解决最优问题的利器。今天我们就来系统学习贪心算法的核心思想,并通过10道LeetCode经典题目实战演练,带你掌握这种"步步为营"的解题思维。
|
3月前
|
供应链 算法 Java
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
【柔性作业车间调度问题FJSP】基于非支配排序的多目标小龙虾优化算法求解柔性作业车间调度问题FJSP研究(Matlab代码实现)
149 1
|
3月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
3月前
|
机器学习/深度学习 算法 安全
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
【无人机三维路径规划】基于非支配排序的鱼鹰优化算法NSOOA求解无人机三维路径规划研究(Matlab代码实现)
115 0

热门文章

最新文章