java数据结构与算法刷题-----牛客,华为机试:HJ3 明明的随机数

牛客网华为机试全攻略:从零基础到高分通过的完整指南 本文提供了一份详尽的牛客网华为机试备考指南。文章系统性地讲解了华为机试的规则、评分机制,并重点剖析了如何高效利用牛客网平台进行针对性训练。从零基础入门到高分进阶,涵盖了语言选择、刷题路径、时间管理、常见避坑策略以及考前冲刺计划,旨在帮助考生系统化备考,在华为机试中取得优异成绩。 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

  1. 思路分析
  1. 如果数字的范围不大,可以用空间换时间,也就是用一个数组充当hash表,下标代表当前值的取值。例如我们当前遍历到一个元素是1,那么就看看hash数组下标为1的位置是否为true,如果为true,就说明当前这个1是重复元素,不需要再次输出
  2. 当然,可以直接用set去重。
  3. 推荐方法:双指针。先将数组排序,然后只判断自己和自己前一个元素两个指针的取值,如果不相等,又因为数组是有序的,那么当前元素一定可以输出,而如果两个指针指向的元素值相同,那么当前元素就是重复的,不进行输出
  1. 代码:先说方法一和方法二,都是使用hash表去重,只不过一个效率较高,使用数组充当hash,但是空间复杂度较高。另一个直接使用set,没有数组直接索引效率高,但是空间复杂度略低
    在这里插入图片描述
import java.util.Scanner;
public class Main {
    /**
     * 方法一:输入的数字范围是1~500
     定义数组,长度为501,用数组下标来代替这些值
     为了节省空间使用boolean类型
     初始所有数组元素为false,出现的数字对应下标设置为true
     然后遍历数组,true的进行输出
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            boolean[] booleans = new boolean[501];
            for(int i = 0;i<n;i++)
                booleans[scanner.nextInt()]=true;
            for (int i = 0;i<booleans.length;i++)
                if(booleans[i]==true) System.out.println(i);
        }
    }

    /**
     * 方法二:set集合直接去重
     * @param args
     */
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        while (scanner.hasNext()){
//            int n = scanner.nextInt();
//            TreeSet<Integer> set = new TreeSet<>();
//            for(int i = 0;i<n;i++){
//                set.add(scanner.nextInt());
//            }
//            System.out.println(set);
//        }
//    }
}
  1. 方法三:使用双指针,一个指针指向当前元素,另一个指针指向前一个元素,如果不同,就输出,但是前提是,数组有序。
import java.util.Scanner;
import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) { // 注意 while 处理多个 case
        //输入
            int n = in.nextInt();//获取本次输入
            int[] arr = new int[n];
            for(int i = 0;i < n; i++) arr[i] = in.nextInt();
        //正式的算法代码
            //排序
            Arrays.sort(arr);
            //第一个元素必然不重复
            System.out.println(arr[0]);
            //其余的元素,如果不重复,就输出
            for(int i = 1;i<n;i++){
                if(arr[i] != arr[i-1]) System.out.println(arr[i]);
            }
        }
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
【华为机试真题 Python】按身高和体重排队 某学校举行运动会,学生们按编号(1、 2、 3…n)进行标识,现需要按照身高由低到高排列,对身高相同的人,按体重由轻到重排列;对于身高体重都相同的人,维持原有的编号顺序关系。请输出排列后的学生编号。两个序列,每个序列由 n 个正整数组成(0 阅读详情

相关推荐

华为OD机试 - 明明的随机数(Java 2024 E卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 1429

牛客 HJ3 明明的随机数

题目描述: 本题讲解: 虽然题目写的难度是较难,这个难度怎么说呢,emmmm,其实就是一个map就可以解决,可以说是简单题。 #include <iostream> #include <string> #include <map> using namespace std; int main() { int n; int num; map<int, int> M; cin >> n; for (int i

weixin_43420303的博客 253

ZYNQ实战:PS端驱动DMA实现高效数据流转与验证

本文详细介绍了在ZYNQ平台上通过PS端驱动DMA实现高效数据流转的实战方法。从ZYNQ的PS与PL数据交互基础出发,深入解析DMA核心价值,包括硬件平台搭建、Vivado配置、PS端软件架构设计及性能优化技巧,帮助开发者提升数据传输效率与系统性能。

weixin_29192141的博客 439

华为机试第三题:HJ3 明明的随机数

HJ3 明明的随机数一、题目描述①描述②输入描述③输出描述④示例一 一、题目描述 ①描述 明明生成了NN个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。 数据范围: 1≤n≤1000 ,输入的数字大小满足 1≤val≤500 ②输入描述 第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。 ③输出描述 输出多行,表示输入数据处理后的结果

faramita_of_mine的博客 3738

流形优化: Manifold Optimization 的 全网最通俗版本详解 (一)

前言 之前忙于论文, 停更了很久。 接下来的一段时间,出于各种原因, 决定在优快云平台上做 最近在 混合波束成形 及 智能反射面 领域 非常常见的流形优化 (Manifold Optimization) 算法 的专题介绍。尽管目前已有了不少的中文博客, 但出于其各种弊端, 使得本篇的成文仍有其不可或缺的意义。 而如果要盘点最核心的意义, 就在于这篇是对读者的 数学能力 与 阅读理解能力 要求最低的 流形优化讲解了。 唯一参考的文献为 Manopt 工具包作者 Boumal 的 新书: An introd

B417科研笔记 2万+

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1294

明明的随机数

题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。 注:测试用例保证输入参数的正确性,答题者无需验证。测试用例不止一组。 当没有新的输入时,说明输入结束。 输入描述: 注意:输入可能有

随心所欲的便笺 287

运动目标成像必学:5分钟搞懂keystone变换原理与避坑指南

本文深入浅出地解析了雷达信号处理中的Keystone变换原理,它是解决运动目标距离徙动问题的关键技术。文章通过直观比喻和简化公式,阐述了该变换如何通过变量代换实现距离与慢时间的解耦合,将倾斜轨迹“掰直”,从而提升成像与检测性能。同时,文中重点指出了实际应用中关于大速度场景、插值误差、多目标处理及高阶运动补偿等关键避坑点,为工程实践提供了宝贵指南。

ios99的博客 403

华为OD机考题HJ3 明明的随机数

描述明明生成了𝑁N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。数据范围: 1≤𝑛≤1000 1≤n≤1000 ,输入的数字大小满足 1≤𝑣𝑎𝑙≤500 1≤val≤500输入描述:第一行先输入随机整数的个数 N。接下来的 N 行每行输入一个整数,代表明明生成的随机数。具体格式可以参考下面的"示例"。输出描述:输出多行,表示输入数据处理后的结果输入:3221输出:12。

磐门的博客 1088

【Claude Code 实战】第十章:DevOps 与 CI/CD 集成 / 光子AI

本章摘要:探讨Claude Code在DevOps与CI/CD集成中的应用。DevOps作为现代软件工程核心,结合AI技术实现自动化全流程,从代码提交到生产部署。通过CALMS模型(文化、自动化、精益、度量、分享)解析DevOps理念,对比传统瀑布模式与DevOps模式差异,展示AI如何加速Dockerfile编写、CI/CD配置等任务。典型示例显示AI可将原本30-60分钟的手动配置缩短至1-2分钟,大幅提升DevOps效率。

AI天才研究院 367

openclaw通俗入门系列6——记忆系统

记忆 = 智能体的笔记本,分长期(MEMORY.md)和每日(memory/日期.md)。只有写到文件里的才能记住!支持语义搜索(理解意思)+ 关键词搜索,还能自动在压缩前保存重要内容。

m0_60605453的博客 403

华为机试打卡 HJ3 明明的随机数

要机试了,华孝子求捞,功德++

cangshanjiang的博客 404

MIMIC数据库简介

一 、MIMIC简介 MIMIC(Medical Information Mart for Intensive Care),是一个大型的公开数据库。该数据库记录了2001年至2019年期间贝斯以色列女狄肯斯医疗中心重症监护病房患者的相关数据,拥有4万多名患者的医疗健康数据和记录。 MIMIC数据库记录了人口统计学信息,如病人的性别、身高、宗教等情况。记录了实验室检验信息,如血常规,肝功能,肾功能等实验室检测数据。记录了患者的用药信息,如高血压患者服用了治疗高血压类药物等。记录了护理人员以及患者的护理级别等。

越努力 越幸运 1万+

【Java】 牛客网华为机试108题汇总

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),* 对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。* 写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

张伟的专栏 2706

从零搭建 SAP ALE/IDoc:自定义 IDoc 结构、Outbound 发送、Inbound 入库与排错全流程

本文介绍了SAP系统中ALE和IDoc技术的应用,用于解决分布式系统集成中的数据传递问题。主要内容包括: ALE/IDoc技术概述 ALE通过消息驱动方式实现业务数据传递 IDoc作为标准化数据信封,包含控制信息、业务数据和状态记录 支持SAP与非SAP系统间集成 核心概念 ALE的价值在于业务消息传递而非远程调用 IDoc由控制记录、数据记录和状态记录三部分组成 WE60工具用于查看IDoc文档结构 实践案例 演示如何将自定义业务表数据打包为IDoc 详细说明IDoc结构定义步骤(段、基本类型、消息类型)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 326

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

牛客华为题库刷题笔记

笔记

qq_42762496的博客 721

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

华为机考-java牛客网/力扣 部分刷题记录

【刷题题型】 1. 入门题(5题) (1) 输入处理(重要):HJ5.进制转换 import java.util.*; public class Main{ public static void main(String[] args){ Scanner in = new Scanner(System.in); String s = in.nextLine(); if(s.contains("0x")){ s

NIki_ya的博客 1668

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

offer求助 引流字节阿里百度腾讯网易米哈游华为比亚迪

主要做CV,多模态和AIGC算法,拿到了阿里达摩院,淘天集团,腾讯AI Lab,商汤研究院,华为中央研究院等多个公司的算法岗offer。九硕,株洲所11*15优点,福利待遇好,五险一金拉满,也会加班,节假日放假比较多,株洲房价很低,汽车事业部前景较好缺点,薪资到手不多,城市比较小,去了只能呆一辈。】在美团实习期间,我有一部分的工作内容是这样的,需要向多方。#晒一晒我的offer# #理想汽车# #秋招# 测评后三面,一面工程师技术短面,二面技术负责人技术面,三面部门经理业务面,目前发了意向书。

2301_79125431的博客 164

明明的随机数(华为机试)

import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Main {     public static void main(String[] args) {         // TODO Auto-generated m...

qq_27689953的博客 324

牛客网华为机试【明明的随机数(java)】

题目描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测试用例里可能会有多组数据,希望大家能正确处理)。 Input Para...

FBB360JAVA的博客 1003

明明的随机数(java)

import java.util.Iterator; import java.util.Scanner; import java.util.TreeSet; public class RandomDataSort { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int

liaction的专栏 3642
上一篇: java数据结构与算法刷题-----牛客,华为机试:HJ2 计算某字符出现次数
下一篇: java数据结构与算法刷题-----牛客,华为机试:HJ4 字符串分隔
ydenergy_殷志鹏
博客等级 码龄7年 5887粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值