刷题基础知识

Map的使用:

 1 public class Main
 2 {
 3     public long factorial(int n){
 4         if(n<=1)
 5             return 1;
 6         return n * factorial(n-1);
 7     }
 8
 9     public long func(String line){
10         HashMap<Character, Integer> map  = new HashMap<Character, Integer>();
11         for(int i=0;i<line.length();i++){
12             Character c = line.charAt(i);
13             if(map.containsKey(c))
14                 map.put(c, map.get(c)+1);    //修改Map的元素值
15             else
16                 map.put(c, 1);
17         }
18         //访问Map
19         long tmp = 1;
20         for(Character key : map.keySet()){
21             int val = map.get(key);
22             tmp *= factorial(val);
23         }
24
25         return factorial(line.length()) / tmp;
26     }
27
28
29     public static void main(String[] args)
30     {
31         Main ob = new Main();
32         Scanner scan = new Scanner(System.in);
33         while(scan.hasNextLine()){
34             System.out.println(ob.func(scan.nextLine()));
35         }
36     }
37 }

匹配一个或多个空格:scan.nextLine().split("\\s+");

大部分内置类均位于java.lang.*、java.util.*、java.io.*包中

格式化输出的方法:

1 System.out.println("x = " + x + ", y = " + y);
2 // printf()方式
3 System.out.printf("x = %d, y = %f\n", x, y);
4 // format()方式
5 System.out.format("x = %d, y = %f\n", x, y);

scan有直接返回大数的方法,无需通过String创建大数。

数组填充:https://www.runoob.com/java/arrays-fill.html

当内存超了,标志数组可以考虑用BitSet:

1 BitSet arr = new BitSet(n);
2 arr.set(0, n, true);
3 arr.get(0)

在处理string和int交叉输入时,最好统一用nextLine()获取行,利用string.split(‘\\s+‘)划分,然后转成int

自定义比较对象:https://blog.csdn.net/qq_36785612/article/details/79935552

 1 import java.util.Arrays;
 2 import java.util.Comparator;
 3 import java.util.Scanner;
 4
 5 public class Main
 6 {
 7     public void func(Score[] countryList){
 8         Arrays.sort(countryList, new MyCompare());
 9         //从大到小打印
10         for(int i=countryList.length-1;i>=0;i--)
11             System.out.println(countryList[i].contouryName);
12     }
13
14     public static void main(String[] args)
15     {
16         Main obj = new Main();
17         Scanner scan = new Scanner(System.in);
18         while(scan.hasNextLine()){
19             int num = Integer.parseInt(scan.nextLine());
20             Score[] countryList = new Score[num];
21             for(int i=0;i<num;i++){
22                 String line = scan.nextLine();
23                 String[] strList = line.split("\\s+");
24                 Score country = new Score(strList[0], Integer.parseInt(strList[1]),
25                         Integer.parseInt(strList[2]), Integer.parseInt(strList[3]));
26                 countryList[i] = country;
27             }
28             obj.func(countryList);
29         }
30     }
31 }
32
33 class Score{
34     public String contouryName;
35     public int goldScore;
36     public int sliverScore;
37     public int bronzeScore;
38
39     Score(){
40         this.contouryName = "";
41         this.goldScore = 0;
42         this.sliverScore = 0;
43         this.bronzeScore = 0;
44     }
45
46     Score(String contouryName, int goldScore, int sliverScore, int bronzeScore){
47         this.contouryName = contouryName;
48         this.goldScore = goldScore;
49         this.sliverScore = sliverScore;
50         this.bronzeScore = bronzeScore;
51     }
52 }
53
54 class MyCompare implements Comparator<Score>{
55     @Override
56     public int compare(Score a, Score b){
57         if(a.goldScore > b.goldScore)
58             return 1;
59         else if(a.goldScore == b.goldScore){
60             if(a.sliverScore > b.sliverScore)
61                 return 1;
62             else if(a.sliverScore == b.sliverScore){
63                 if(a.bronzeScore > b.bronzeScore)
64                     return 1;
65                 else if(a.bronzeScore == b.bronzeScore)
66                     return a.contouryName.compareTo(b.contouryName);
67             }
68         }
69         return -1;
70     }
71 }

java中的栈类:

1 import java.util.Stack;

求最大公约数:辗转相除法。

表达式的计算:

建立两个栈:一个a存数字,一个b存运算符。

从左向右遍历,若为数字直接入a,若为运算符与b栈顶比较:若优先级大则入栈b;否则

对List排序:

1 import java.util.Collections;
2 Collections.sort(list);

注意string.replaceAll才支持正则表达式,string.replace不支持.

1  String strM = mStr.replaceAll("\\s+", "").toLowerCase();

去除string开头结尾的空格和换行符:

1 str.trim()

将int转成BigInterger:

1 BigInteger bi = BigInteger.valueOf(myInteger.intValue());

对于高精度的double小数或大数,直接利用toString()转成String,或直接打印,均会以科学计数法输出。解决办法:

1 BigDecimal bigA = new BigDecimal(a);
2 BigDecimal res = bigA.pow(b);
3 String sRes = res.stripTrailingZeros().toPlainString();    //去除末尾无效0

char转int不一定要强制转换,但是int转char要强制转换。

判断数组中是否存在重复元素:

 1 public static boolean hasRepeat(String[] pInStr){
 2     HashSet<String> hashSet = new HashSet<>();
 3     for(int i=0;i<pInStr.length;i++){
 4         hashSet.add(pInStr[i]);
 5     }
 6     if(hashSet.size() == pInStr.length){
 7         return false;
 8     } else{
 9         return true;
10     }
11 }

判断数组中是否包含某个元素:

1 Arrays.asList(pInStr).contains(FirstState)

对ArrayList动态数组排序:

 1 ArrayList<String> leftList =  new ArrayList<>();
 2 ArrayList<String> rightList =  new ArrayList<>();
 3 for(int i=0;i<pInStr.length;i++){
 4     if(FirstState.compareTo(pInStr[i])<=0){
 5         leftList.add(pInStr[i]);
 6     } else{
 7         rightList.add(pInStr[i]);
 8     }
 9 }
10 Collections.sort(leftList);
11 Collections.sort(rightList);

对String[]排序:

Arrays.sort(strList); //无返回值

原文地址:https://www.cnblogs.com/luckyboylch/p/12327316.html

时间: 2024-10-05 20:38:52

刷题基础知识的相关文章

LeetCode刷题 --基础知识篇-- 链表

题目来源与力扣,传送门在这里. 众所周知,链表是很重要的一种数据结构,但同时也很容易出错,二狗在重温这部分内容时被人指点了一些典型的题目,顺手去leetCode刷了一些,记录如下. <206.单链表反转>(https://leetcode-cn.com/problems/reverse-linked-list/) 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL 1

LeetCode刷题--基础知识篇--KMP算法

KMP算法 关于字符串匹配的算法,最知名的莫过于KMP算法了,尽管我们日常搬砖几乎不可能去亲手实现一个KMP算法,但作为一种算法学习的锻炼也是很好的,所以记录一下. KMP算法是根据三位作者(D.E.Knuth, J.H.Morris和V.R.Pratt)的名字来命名的,算法的全称是Knuth Morris Pratt算法,简称为KMP算法. 关于字符串匹配,我们假设要在字符串A中查找字符串B,那么我们可以把字符串A叫做主串,把B叫做模式串.所以字符串匹配其实就是要在主串中找到与模式串相同的子串

每日刷题191130 --基础知识篇 二叉搜索树

休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继),INSERT和DELETE等.因此我们使用一颗搜索树既可以作为一个字典又可以作为一个优先队列.且二叉搜索树上的基本操作所花费的时间与这棵树的高度成正比.二叉搜索树有两个很重要的变体,红黑树与B树,这个我们之后有机会再补一篇文章. 顾名思义,一棵二叉搜索树是以一棵二叉树来组织的.如图所示,这样的一

Linux基础知识题解答(六)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (1)怎样查看文件或目录的属性,给出命令. ls -l 或者 ll (2)描述硬链接和软链接的区别 1.硬链接原文件/链接文件共用一个inode号,说明他们是同一个文件,而软链接原文件/链接文件拥有不同的inode号,表明他们是两个不同的文件:2.在文件属性上软链接明确写出了是链接文件,而硬链接没有写

C语言程序设计做题笔记之C语言基础知识(上)

C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎所以的任务,包括会计应用程序.字处理程序.游戏.操作系统等.它不仅是更高级语言(如C++)的基础,目前还以Objective C的形式开发手机应用程序.目前,C语言最新版本由ISO/IEC 9899:2011 文档定义.           数据结构+算法=程序 1.1 C程序和程序设计 (1)以下

C语言程序设计做题笔记之C语言基础知识(下)

C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的几乎所以的任务,包括会计应用程序.字处理程序.游戏.操作系统等.它不仅是更高级语言(如C++) 的基础,目前还以Objective C的形式开发手机应用程序.目前,C语言最新版本由ISO/IEC 9899:2011 文档定义.           数据结构+算法=程序 1.1 C程序和程序设计 (1

不要看不起刷题,对于普通人来说,这个更重要。“快乐教育”,会对知识的兴趣。博雅教育,等坚船厉炮以来,就成渣渣了(另一方面由于中国的崛起,世界真的改变了,而且风口更多)

事实上他教了黄蓉打狗棒法,并且黄蓉学的非常好.降龙十八掌黄蓉学不了,因为这个是阳刚的路子,不适合女人. 你这个学校肯定是私立的,肯定比公立的好些.不过嘛,其实这种学校是拼家长的:孩子学了一大堆精英做派,什么分享啦.创意啦,这些都很好:问题是,怎么才能先变成精英阶层呢? 一个扫大街的人.端盘子的人需要很有创意吗?换个角度,一个普通人的孩子和比尔盖茨的孩子上同一个学校,玩的一样好,最后他们能取得一样的成就吗? 所以不要看不起刷题,对于普通人来说,这个更重要. https://www.ccthere.

Linux基础知识题解答(五)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (1)155729 -rw-r--r--.  1 root root   35 Oct 28 2011  oldboy 请解析上面的每一列内容 文件inode号,文件访问权限,硬链接数,文件所属用户,文件所属组,文件最后修改时间,文件名 (2)描述下硬链接和软连接的区别 1.硬链接原文件/链接文件共用

linux基础知识题解答(九)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (Linux用户权限-磁盘-网络) (1)列出 IPv4 的网络地址的分类,各分类容纳的网络数和主机数,以及前三类中的私有地址. A类:1~126,私有地址10.0.0.0~10.255.255.255 B类:128~191,私有地址172.16.0.0~172.31.255.255 C类:192~2