华为OD机试牛客网刷题的一些总结java/Python

偶然间看到这个话题,觉得和自己最近的刷题经历很像,所以也想把经历做个记录和分享。我是一枚测试,都是自学的编程语言,编程能力一般,刷题过程从最开始题都看不懂,到写读取输入数据代码都费劲,到能做一些简单的题,到连续两次考试0分,再到更换编程语言重新刷题,再到如今考试360分。说实话还蛮佩服自己的,也希望同在刷题的你坚持不懈!

一、我的刷题经历

1.我最开始使用的是Java语言,刷题是在力扣上。但是一开始进展并不顺利,个人感觉:力扣网上的题目描述比较简单,有时难以理解题意;代码编写是以既定的形式,通常是在某个方法中实现,不够灵活;另外代码格式调整方式不够智能;道友的解题方式要么是大神,要么很多相同的。
2.经过两次考试失败后,我又全新学习了Python语言,并且主要在牛客网上刷题。个人比较喜欢牛客网的刷题:题目描述相对清楚一点而且代码的自测调试也更加灵活;而且华为机考以牛客网方式进行。

二、刷题中遇到的问题

1.编程语言掌握

就刷题而言,不管是Java还是Python,个人认为掌握入门到实践就可以进行刷题了。比如Java,掌握语法规则、数据类型及表达式,结构化的程序设计以及类与对象。至于一些特别的类,比如List、Map、Collection、StringBuilder等等,都可以在刷题中一边学一边应用,更容易上手。

2.理解题意

刷题时,遇到反复理解都理解不了一点的题,就直接看道友解析吧,你会发现不只你一人是这样的,这种没必要纠结,耗费太多心神。比如,
华为OD机试牛客网刷题的一些总结java/Python_第1张图片
这虽然是简单,但我看了好一会儿,完全不知道啥意思…所以不必理会

另外,对于初入门的刷题道友,建议先多看:多看看其他道友的解题思路,然后自己理解,然后再根据自己理解,尽量不看解析的前提自行编程

3.读取输入

想来我也差点因为这个原因而从入门到放弃,因此掌握读取输入参数的方法尤为重要。
比如java语言:

import java.util.Scanner;

// Java中通过向实现Scanner类来获得读取输入值或判断是否有输入值的方法
// 常用的有hasNextLine()、nextLine()、hasNext()、next()
// 同时,还应该掌握快速转换输入数据类型的方法:比如字符串转整型、字符串
//转数组等
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            int leng = str.length();
            int zero = 8 - (leng % 8);
            if(zero > 0 && zero < 8){
                for(int i = 0; i < zero; i++){
                str = str +"0";
                }
            }            
            for(int i = 0; i < str.length() /8; i++){
                int index = i * 8; 
                System.out.println(str.substring(index,index+8));                         
            }
            
        }
       
    }
}

又如Python语言:

# 方式1.input(),这种方式读取的数据类型是字符串,而且是一次读取一整行
# 以回车键结束
n = int(input()) # 将字符串转化为整型
lst = list(map(int, input().split()))
# 现将输入按空格拆分,然后用map()函数将拆分后的数据转化为整型,最后转化为列表
suma = 0
sumb = 0
for i in lst:
    suma = suma ^ i
if suma != 0:
    print('-1')
else:
    sumb = sum(lst) - min(lst)
    print(sumb)
# 方式2  sys.stdin
# 一次读取一整行,然后对数据解析
import sys

for line in sys.stdin:
    a = line.split()
    print(int(a[0]) + int(a[1]))

4.总结题目类型

我总结的常见的题目类型及知识点有:字符串处理,递归,BFS/DFS,贪心,滑窗,堆栈,动态规划。刷题的时候可以按照知识点分类,针对每一类,对其常见题型理解透彻,掌握并牢记其编程思想。附上我最近的刷题记录,刚刷完,还没有作注释,先不放代码。
华为OD机试牛客网刷题的一些总结java/Python_第2张图片

5.刷题速度

我最开始一道题要花两三个小时,有时候需要一天的时间。但我觉得先别急,别急着快。最重要的是花了时间,就应该把解题思路弄得明明白白的,一遍不懂就两遍。

三、会当凌绝顶

总结一下我的刷题流程:1.先看道友、牛人及官方的解题思路,然后写下自己的理解思路,接着根据思路编程调试;2.连续几天后就先自己理解题意并梳理解题思路,然后再编程,调试后再看道友的解题思路以拓宽思维;3.然后就是不同题型,难易程度从简单到困难依次进行;4.最后就是重复重复再重复。

最后,刷题的过程可能是困难、痛苦的,但结果一定是激动、灿烂的。相信会当凌绝顶,一览众山小!

你可能感兴趣的:(python,华为od,java)