AcWing 3761. 唯一最小数

问题描述

给定一个长度为 n 的整数数组 a 1 , a 2 , … , a n a1,a2,…,an a1,a2,,an

请你找到数组中只出现过一次的数当中最小的那个数。

输出找到的数的索引编号。

a 1 a1 a1的索引编号为 1 1 1 a 2 a2 a2的索引编号为 2 2 2,…, a n an an的索引编号为 n n n

输入格式:

第一行包含整数 T T T,表示共有 T T T组测试数据。

每组数据第一行包含整数 n n n

第二行包含 n n n 个整数 a 1 , a 2 , … , a n a1,a2,…,an a1,a2,,an

输出格式:

每组数据输出一行结果,即满足条件的数的索引编号,如果不存在满足条件的数,则输出 − 1 −1 1

数据范围

1 ≤ T ≤ 2 × 104 , 1≤T≤2×104, 1T2×104,
1 ≤ n ≤ 2 × 105 , 1≤n≤2×105, 1n2×105,
1 ≤ a i ≤ n , 1≤ai≤n, 1ain,
同一测试点内的所有 n n n的和不超过 2 × 1 0 5 2×10^5 2×105

输入样例:

6
2
1 1
3
2 1 3
4
2 2 2 3
1
1
5
2 3 2 4 2
6
1 1 5 5 4 4

输出样例:

-1
2
4
1
2
-1

思路

原题链接

C++代码:

#include <iostream>
#include <cstring>

using namespace std;

const int N = 2e5 + 10;

int n;
int w[N], cnt[N];

int main()
{
    int T;
    scanf("%d", &T);
    
    while (T -- )
    {
        scanf("%d", &n);
        //每组数据使用前都要清空cnt中记录的数字的次数
        memset(cnt, 0, (n + 1) * 4);
        
        //用cnt数组来记录每个数字出现多少次
        //用w数组来记录每个数字下下标
        for (int i = 0; i < n; i ++ )
        {
            scanf("%d", &w[i]);
            cnt[w[i]] ++ ;
        }
        
        int res = -1;//直接置为-1 假设不存在此种情况
        
        //扫描一遍cnt数组,找出只出现一次的数字进行判断,然后找出最小的出现一次的数字,输出下标。
        for (int i = 0; i < n; i ++ )
        {
            if (cnt[w[i]] == 1) //只对该数字 只出现一次的进行判断
            {
                if (res == - 1 || w[res] > w[i])
                    res = i; // 找出最小的数字 在w数组中 i即为下标
            }
        }
        if (res != - 1) res ++; //位置偏移1
        printf("%d\n", res);
    }
    
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Java中的Workbook对象,没有直接的方法来增加小。Workbook对象通常用于处理Excel文件,而Excel文件的小是通过格式化单元格来实现的。 要增加一个单元格的小,您可以使用Cell对象的setCellStyle()方法来设置单元格的样式。首先,您需要创建一个新的CellStyle对象,并设置其中的据格式为带有所需小的格式。然后,将该样式应用于要修改的单元格。 以下是一个示例代码来增加单元格的小: ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelUtils { public static void main(String[] args) { try { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); Row row = sheet.createRow(0); Cell cell = row.createCell(0); // 设置小为两位 CellStyle style = workbook.createCellStyle(); style.setDataFormat(workbook.createDataFormat().getFormat("0.00")); cell.setCellStyle(style); // 设置单元格值为小 cell.setCellValue(3.14159); // 保存Excel文件 String filePath = "path/to/your/excel/file.xlsx"; FileOutputStream fileOut = new FileOutputStream(filePath); workbook.write(fileOut); fileOut.close(); System.out.println("Excel文件已成功保存!"); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上述示例中,我们使用Apache POI库来处理Excel文件。首先,创建一个新的XSSFWorkbook对象,然后创建一个Sheet和Row对象,并在其中创建一个Cell对象。接下来,我们创建一个新的CellStyle对象,并设置其据格式为带有两位小的格式("0.00")。最后,将该样式应用于单元格,并将其值设置为小(如3.14159)。最后,通过调用Workbook对象的write()方法将文件保存到磁盘上的指定路径。 请注意,这只是一个示例代码,您需要根据您的实际需求进行修改和适应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值