2023年七月六日集训
  MpDIILUd3rHo 2023年11月01日 93 0

最重点,哈希表

`import java.util.Scanner;
import java.util.;
public class Cf1300c{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Hashtable<String, Integer> hash_t = new Hashtable<>();
int n = sc.nextInt();
sc.nextLine();
/

这段代码是一个简单的哈希表应用,实现了一个功能:检查输入的字符串是否在哈希表中已经存在,如果存在,则输出该字符串的出现次数+1,如果不存在,则输出"OK"并将该字符串添加到哈希表中。

代码解释如下:

  1. for (int i = 0; i < n; i++):循环n次,用来处理n个输入的字符串。
  2. String a = sc.nextLine();:从输入中读取一行字符串,并将其赋值给变量a。
  3. if (hash_t.containsKey(a)):判断哈希表hash_t中是否包含字符串a,即判断a是否已经出现过。
  4. 如果a已经出现过:
    a. int b = hash_t.get(a);:从哈希表中获取字符串a对应的值,即出现次数是哪一次。
    b. b++;:将出现次数+1。
    c. hash_t.put(a, b);:将更新后的出现次数存回哈希表中。
    d. System.out.println(a + b);:输出字符串a和出现次数。
  5. 如果a没有出现过:
    a. System.out.println("OK");:输出"OK"。
    b. hash_t.put(a, 0);:将字符串a添加到哈希表中,并将出现次数初始化为0。

通过使用哈希表,可以高效地判断字符串是否已经出现,并记录每个字符串的出现次数。这在统计词频、记录重复项等场景中非常有用。

     */
    for( int i=0; i<n; i++)
    {
        String a = sc.nextLine();
        if( hash_t.containsKey(a)) {
            int b = hash_t.get(a);
            b++;
            hash_t.put(a,b);
            System.out.println( a+b);
        }
        else{
            System.out.println( "OK");
            hash_t.put( a, 0);
        }
    }
}

}
`
Math 常用函数


关于内部类,在逆序的时候,采用这种形式
Integer[] integer={123,3,4,1,123,4,1,21,2,1,2,4}; Arrays.sort(integer, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o2-o1; } });
缩写形式,称之为lamb表达式
System.out.println("--------------lambda-------------------"); Arrays.sort(integer,(Integer o1, Integer o2)->{ return o2-o1; } ); System.out.println("-----------------lambal简化-------------"); Arrays.sort(integer,(o1,o2)->o2-o1); System.out.println(Arrays.toString(integer));

file:///C:/Users/chen/Documents/Tencent%20Files/lamda.html
关于简单集合


`/* public static string tostring(数组)
把数组拼接成一个字符串
public static int binarySearch(数组,查找的元素)
二分查找法查找元素(向上对齐)
public static int[]copyof(原数组,新数组长度)
拷贝数组
public static int[]copyOfRange(原数组,起始索引,结束索引)
拷贝数组(指定范围)
public static void fi11(数组,元素)
填充数组
public static void sort(数组)
按照默认方式进行数组排序
public static void sort(数组,排序规则)
按照指定的规则排序gssdhdfhgdrh*/
int arr[]={3,4,52,25,63,24,25,2,1,4};
System.out.println(Arrays.toString(arr));

    System.out.println("-----------------------------------------------");
    System.out.println(Arrays.binarySearch(arr,0));
    System.out.println(Arrays.binarySearch(arr,6));
    System.out.println(Arrays.binarySearch(arr,3));


    System.out.println("------------------------------------------");
    int []newArr=Arrays.copyOf(arr,20);
    System.out.println(Arrays.toString(newArr));


    System.out.println("------------------------------------------");
    int[]newArr2=Arrays.copyOfRange(arr,5,9);//包右不包左
    System.out.println(Arrays.toString(newArr2));


    System.out.println("------------------------------------------------");
   Arrays.fill(newArr2,100);
    System.out.println(Arrays.toString(newArr2));


    System.out.println("----------------------------------------------");
    Arrays.sort(arr);
    System.out.println(Arrays.toString(arr));

`
(n+a-1)/a*((m+a-1)/a)
是指codeforce上关于找到
这段代码的意思是,从输入中读取三个整数n,m,a,并输出一个整数,表示用尺寸为a的正方形瓷砖铺满长度为n和宽度为m的地面所需要的瓷砖的数量。
具体的计算方式是通过将n和a相除并向上取整得到需要铺设的瓷砖的行数,同时将m和a相除并向上取整得到需要铺设的瓷砖的列数,最后将两个结果相乘即可得到总数。

找到那个特殊的,只需要找到几个数中小的那个就够了
/* 鲍勃正在准备通过智商测试。在这个测试中最常见的任务是找出给定的n个数字中哪一个不同于其他的。鲍勃注意到,一个数字的均匀度通常不同于其他数字。帮助鲍勃-检查他的答案,他需要一个程序,在给定的n个数字中找到一个不同的偶数。 输入 第一行包含整数n(3≤n≤100)-任务中的数字数量。第二行包含n个空格分隔的自然数,不超过100。可以保证的是,这些数字中有一个在均匀性上不同于其他数字。 输出 在均匀性上不同于其他数的输出指数。数字按照输入顺序从1开始编号。 */ public class Cf1300A { public static void main(String[] args) { int a=0; int b=0; Scanner sc=new Scanner(System.in); int t; t=sc.nextInt(); for(int i=1 ;i<=t;i++){ if(sc.nextInt()%2!=0) b=b+i; else a=a+i; } System.out.println(Math.min(a, b)); } }

而关于递归的方法,第一步就是先找规律,再进行嵌套书写,只找其中一个的规律,简化书写

public class cpp36right { /* 有一个很有名的数学逻辑题叫做不死神兔问题,有一对兔子,从出生后第三个月起每个月都生一对兔子 ,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第十二个月的兔子对数为多少?*/ public static void main(String[] args) { /*Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[]arr=new int[n+1]; arr[1]=1; arr[2]=1; for (int i = 3; i <=n; i++) { arr[i]=arr[i-1]+arr[i-2]; } System.out.println(arr[n]);*/ System.out.println(getsum(12)); } public static int getsum(int month){ if(month==1||month==2){ return 1; }else { return getsum(month-1)+getsum(month-2); } } }
上楼相关习题

public static int getlou(int n){ if(n==1){ return 1; } if(n==2){ return 2; } return getlou(n-1)+getlou(n-2); } }

关于女朋友的题目
`public class cpp36 {
public static void main(String[] args) {
/*
定义数组并存储一些女朋友对象,利用Arrays中的sort方法进行排序
要求1:属性有姓名、年龄、身高。
要求2:按照年龄的大小进行排序,年龄一样,按照身高排序,身高一样按照姓名的字母进行排序。
(姓名中不要有中文或特殊字符,会涉及到后面的知识)
*/
Girlfriend girlfriend1=new Girlfriend("wuyanzu",19,176);
Girlfriend girlfriend2=new Girlfriend("asd",18,20);
Girlfriend girlfriend3=new Girlfriend("qweq",18,180);
Girlfriend[]arr={girlfriend1,girlfriend2,girlfriend3};
Arrays.sort(arr, new Comparator () {
@Override
public int compare(Girlfriend o1, Girlfriend o2) {
double temp = o1.getAge() - o2.getAge();
temp = temp == 0 ? o1.getHeight() - o2.getHeight() : temp;
temp = temp == 0 ? o1.getName().compareTo(o2.getName()) : temp;
if(temp>0){
return 1;
}else if (temp<0){
return -1;
}else {
return 0;
}
}
});
System.out.print(Arrays.toString(arr));
}
}
class Girlfriend{
private String name;
private int age;
private double height;

public Girlfriend() {
}

public Girlfriend(String name, int age, int height) {
    this.name = name;
    this.age = age;
    this.height = height;
}

/**
 * 获取
 * @return name
 */
public String getName() {
    return name;
}

/**
 * 设置
 * @param name
 */
public void setName(String name) {
    this.name = name;
}

/**
 * 获取
 * @return age
 */
public int getAge() {
    return age;
}

/**
 * 设置
 * @param age
 */
public void setAge(int age) {
    this.age = age;
}

/**
 * 获取
 * @return height
 */
public double getHeight() {
    return height;
}

/**
 * 设置
 * @param height
 */
public void setHeight(int height) {
    this.height = height;
}

public String toString() {
    return "Girlfriend{name = " + name + ", age = " + age + ", height = " + height + "}";
}

}

`

Java HashMap containsKey() 方法

Java HashMap Java HashMap

containsKey() 方法检查 hashMap 中是否存在指定的 key 对应的映射关系。

containsKey() 方法的语法为:

hashmap.containsKey(Object key)

注:hashmap 是 HashMap 类的一个对象。

参数说明:

  • key - 键

返回值

如果 hashMap 中存在指定的 key 对应的映射关系返回 true,否则返回 false。

实例

以下实例演示了 containsKey() 方法的使用:

实例

import java.util.HashMap;

class Main {
public static void main(String[] args) {
// 创建一个 HashMap
HashMap<Integer, String> sites = new HashMap<>();

// 往 HashMap 添加一些元素
​ sites.put(1, "Google");
​ sites.put(2, "Runoob");
​ sites.put(3, "Taobao");
​ System.out.println("sites HashMap: " + sites);

//检查 key 为 1 是否存在
if(sites.containsKey(1)) {
​ System.out.println("key 为 1 存在于 sites 中");
​ }

}
}

执行以上程序输出结果为:

sites HashMap: {1=Google, 2=Runoob, 3=Taobao}
key 为 1 存在于 sites 中

对于不存在的,我们可以执行插入操作。

实例

import java.util.HashMap;

class Main {
public static void main(String[] args) {
// 创建一个 HashMap
HashMap<Integer, String> sites = new HashMap<>();

// 往 HashMap 添加一些元素
​ sites.put(1, "Google");
​ sites.put(2, "Runoob");
​ sites.put(3, "Taobao");
​ System.out.println("sites HashMap: " + sites);

//检查 key 为 4 是否存在,不存在插入该 key/value 对
// 使用 ! 符号来对布尔结果取相反的值
if(!sites.containsKey(4)) {
​ sites.put(4, "Wiki");
​ }
​ System.out.println("Updated sites HashMap: " + sites);
}
}

执行以上程序输出结果为:

sites HashMap: {1=Google, 2=Runoob, 3=Taobao}
Updated sites HashMap: {1=Google, 2=Runoob, 3=Taobao, 4=Wiki}

注意:我们还可以使用 HashMap putIfAbsent() 方法执行相同的操作。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: Java 构造器 下一篇: java中Object 类
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   53   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   109   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
MpDIILUd3rHo