用Java刷算法题的常用数据结构(C++转Java)


文章目录

  • 一:前言
    • 1:为何刷题从C++转java
    • 2:如何上手呢?
  • 二:输入
    • 1:常规的输入
    • 2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决
    • 3:常见输入之我们输入一串数到容器中
  • 三:常用的数据结构
    • 1:数组
    • 2.List
    • 3:Map
    • 4:Set
    • 5.栈
    • 6:队列


一:前言

1:为何刷题从C++转java

  • 平时除了写项目的话,才用java,刷题的话就用C++,但是这样的话,对java的一些基本知识掌握不牢固,昨天jd的笔试当中
    就有考察一些基础知识
  • 虽然算法思路是最重要的,具体用什么语言实现主要 看自己对那门语言的数据结构用的溜即可 但是的话,实现是相同的
    以后毕竟还是要吃java这份饭的,对一些数据结构熟悉一些,对于写一个工具类,或者是阅读源码会更方便一些
  • 面试手撕算法题是可以用C++的,但是 从长远来看 用java刷题还是好处多多

2:如何上手呢?

  • 先了解常用的数据结构 无非就是数组 栈 队列 set list hashmap
  • 然后就是元素的插入,元素的遍历,一些常用API的调用,以及每个数据结构的特点

二:输入

1:常规的输入

		Scanner in = new Scanner(System.in);System.out.println("请输入你的年龄:");int age = in.nextInt();//整数类型的输入方式System.out.println("请输入你的身高:");double height = in.nextDouble();//小数类型的输入方式

2:关于其他输入符在nextLine()之前用吃掉回车符的问题解决

当比如我们在输入的是时候前面用了 nextInt();后面的话用了nextLine()的话,其会吃掉回车符,导致我们无法正常输入
那么我们的解决办法有两种

  • 将nextLine()改为next(),但是呢那么你就无法输入带空格的字符了
  • 将nextLine()的前面再加上nextLine(),这样就可以帮助我们吃掉回车符,那么我们正常的输入就不会有问题了。
  • 请看示例:
 Scanner in = new Scanner(System.in);System.out.println("请输入你的年龄:");int age = in.nextInt();//整数类型的输入方式System.out.println("请输入苹果的英文:");in.nextLine();//nextLine()会吃掉回车符,这样的话 我们下面就可以正常输入了String s1 = in.nextLine();//nextLine是可以输入带空格的数据的。System.out.println("请输入你的身高:");double height = in.nextDouble();//小数类型的输入方式

3:常见输入之我们输入一串数到容器中

这个是我们常用的之一,当题目给出一串数的话,我们往往是要将其存放在容器当中的,那么的话我们就可以方便操作了

  		Scanner in = new Scanner(System.in);int[] arr = new int[10];for (int i = 0; i < 10; i++) {arr[i] = in.nextInt();}for (int i : arr) {System.out.print(i+ " ");}

三:常用的数据结构

1:数组

  • 定义
 int len = 5;int[] arr = new int[len];
  • 赋值
for (int i = 0; i < arr.length; i++) {Scanner scanner = new Scanner(System.in);arr[i] = scanner.nextInt();}
  • 遍历输出
for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);
}
  • 常用API之排序
  Arrays.sort(arr);

2.List

  • 定义
 		List<Integer> list = new ArrayList<>();
  • 赋值
		for (int i = 0; i < 5; i++) {int nums = in.nextInt();list.add(nums);}
  • 遍历
    遍历输出 它的大小是 size() 区别数组的 length 区别字符串的 length()
 		for (int i = 0; i < list.size(); i++) {System.out.print(list.get(i)+" ");}
  • API调用之sort升序
    注意o1.conpareTo(o2)
 	  list.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1.compareTo(o2);//这里还可以用 o1 - o2 这个是等价的}});

conpareTo的源码:
其实就是3目运算符

	public static int compare(int x, int y) {return (x < y) ? -1 : ((x == y) ? 0 : 1);}
  • API调用之sort降序
    ** 注意o2.compareTo(o1)**
		list.sort(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2.compareTo(o1);//这里还可以用 o2 - o1 这个是等价的}});
  • API调用之按照对象的某个字段排序
    关于这个我们给出一个情景好记忆。
    比如我们要给一个班级数学成绩排序,数学成绩相同的话,那么我们就按照名字的字典序进行排序。
    输入:5
    wyj 100
    aaa 90
    abc 100
    bbb 70
    ccc 30
    输出: abc 100
    wyj 100
    aaa 90
    bbb 70
    ccc 30

public class textList {public static void main(String[] args) {Scanner in = new Scanner(System.in);ArrayList<Student> list = new ArrayList<>();System.out.print("请输入学上的个数:");int studentNums = in.nextInt();for (int i = 0; i < studentNums; i++) {String sname = in.next();//nextLine()输入的是一行数据会包含空格 eg wyj 100int sgrade = in.nextInt();list.add(new Student(sname,sgrade));}list.sort(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if (o1.getGrate() == o2.getGrate()) {return o1.getName().compareTo(o2.getName());}return o2.getGrate()-(o1.getGrate());}});for (int i = 0; i < studentNums; i++) {System.out.println(list.get(i).toString());}}
}class Student {private String name;private int grate;public Student(String name, int grate) {this.name = name;this.grate = grate;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getGrate() {return grate;}public void setGrate(int grate) {this.grate = grate;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", grate=" + grate +'}';}
}

在这里插入图片描述

3:Map

  • 定义
 Map<String,Integer> map = new HashMap<>();
  • 赋值
for (int i = 0; i < 3; i++) {String name  = in.next();int grade = in.nextInt();map.put(name,grade);}
  • 遍历
    map提供的get方法是根据key值来获取 value 值
   for (String s : map.keySet()) {System.out.println(s + " " + map.get(s));}
  • 常用API之判断某个值是否存在
map.containsKey("wyj")
  • 常用API之移除某个key
map.remove("wyj")
  • Entry
    由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系。
    Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也就是一个Entry)
    Map.Entry里面包含getKey()和getValue()方法
Iterator<Map.Entry<Integer, Integer>> it=map.entrySet().iterator();while(it.hasNext()) {Map.Entry<Integer,Integer> entry=it.next();int key=entry.getKey();int value=entry.getValue();System.out.println(key+" "+value);}
  • entrySet
    entrySet是 java中 键-值 对的集合,Set里面的类型是Map.Entry,一般可以通过map.entrySet()得到。
    entrySet实现了Set接口,里面存放的是键值对。一个K对应一个V。
    用来遍历map的一种方法。
	Set<Map.Entry<String, String>> entryseSet=map.entrySet();for (Map.Entry<String, String> entry:entryseSet) {System.out.println(entry.getKey()+","+entry.getValue());}

4:Set

  • 定义
     HashSet<Integer> set = new HashSet<>();
  • 赋值
 for (int i = 0; i < 3; i++) {int nums = in.nextInt();set.add(nums);}
  • 遍历
    这里的遍历的话 是可以去重的和升序的
  		for (int nums:set) {System.out.println(nums);}
  • 常用API之判断某个元素是否存在
set.contains(元素)
  • 常用API之移除某个key
set.remove(1)
  • 常用API之清空容器
    set.clear();

5.栈

//这是一个双端队列
ArrayDeque<Character> deque = new ArrayDeque<>();//在栈中push就是往容器尾部插入一个值
deque.push('a');
deque.push('b');
deque.push('c');
deque.push('d');//访问栈顶元素
System.out.println(deque.peek());//删除一个元素
deque.pop();
System.out.println(deque.peek());

6:队列

//这是一个双端队列
ArrayDeque<Integer> deque = new ArrayDeque<>();//用add的话表示就是取元素顺序时候就是先进先出
deque.add(1);
deque.add(2);
deque.add(3);//我们用 peek()进行访问 访问的是队列首部元素
System.out.println(deque.peek());//我们用 pool()表示的就是移除队列首部元素
deque.poll();
System.out.println(deque.peek());//访问队尾元素
System.out.println(deque.getLast());//移除队尾元素
deque.removeLast();
System.out.println(deque.getLast());

后序用到啥了再补充,这些都是平常用C++常用的API我就是在java当中找到对应的而已,一直不太想用java写算法题就是因为原来的C++的API调用熟悉了,但是打败恐惧的最好办法就是直面恐惧,我把以前不熟悉的总结出来,再用java写算法就不怵了 后续继续补充 有错请指出。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/307406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Magicodes.IE 2.4发布

今天我们发布了2.4版本&#xff0c;这离不开大家对Magicodes.IE的支持&#xff0c;我们也对大家的意见以及需求不断的进行更新迭代&#xff0c;目前我们的发布频率平均在一周一个beta版本&#xff0c;一个月一个正式版本的更新&#xff0c;我们欢迎更多的开发者加入进来&#x…

7-1 简单词法分析

一:题目 二:思路 思路: 1.记得看书;不要一上来就莽;不然莽不过去的 2.这里我从书中了解到 f(0,b) 0; f(0,a) 1;f(1,c)1;f(1,b)3… 那么的话我们只要最终推导出f(1,b)3;那么的话就是一个满足要求的字符串; 注意我们入口部分一定是从 0 开始; 3.接下来就是要判断一些细枝末节 …

Java 生态碎片化 和 .NET生态的一致性

.NET Core是以MIT协议开源&#xff0c; Java是GPL协议开源。Java 8 SDK升级Oracle要收费这件事对于很多小公司是有着重大的影响的&#xff0c;Java生态越发碎片化&#xff0c;有众多的OpenJDK发行版&#xff0c;腾讯云和阿里都有OpenJDK发行版&#xff0c;龙芯也有MIPS版本的Op…

Power Automate Desktop概览

点击蓝字关注我们Microsoft Power Automate使得通过自动化重复性、耗时的任务来提高您的业务效率成为可能。Power Automate提供了一种更好的方法&#xff0c;通过数字和机器人过程自动化(RPA)在整个组织中完成任务。Microsoft Ignite 在线活动小伙伴们都有参加么&#xff1f;重…

超600人!近5小时直播!录屏+彩蛋+PPT…你要的都在这!

2020年9月26日下午&#xff0c;《NCF框架揭秘》直播交流会圆满落幕&#xff01;由盛派首席架构师苏震巍老师主持、分享&#xff0c;更有各路大咖&#xff0c;在线助力&#xff0c;干货满满&#xff01;点击视频 ☝ 回顾直播现场友情提示&#xff1a;如果公众号内视频无法显示高…

leetcode226. 翻转二叉树(Java)

一&#xff1a;题目 二:上码(前序解法) /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left,…

Chrome正在启用HTTP/3,支持IETF QUIC

Chromium 官方宣布 Chrome 正在部署到 HTTP/3 与 IETF QUIC。QUIC&#xff08;Quick UDP Internet Connections&#xff09;是 Google 推出的一个项目&#xff0c;旨在降低基于 TCP 通讯的 Web 延迟。QUIC 非常类似 TCPTLSSPDY &#xff0c;但是基于 UDP 实现的。它是 HTTP/3 的…

leetcode101. 对称二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

诊断日志知多少 | DiagnosticSource 在.NET上的应用

1. 引言最近为了解决ABP集成CAP时无法通过拦截器启用工作单元的问题&#xff0c;从小伙伴那里学了一招。借助DiagnossticSource&#xff0c;可以最小改动完成需求。关于DiagnosticSource晓东大佬18年在文章 在 .NET Core 中使用 Diagnostics (Diagnostic Source) 记录跟踪信息就…

leetcode110. 平衡二叉树(java详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

IdentityServer4系列 | 常见术语说明

一、前言在上一篇中&#xff0c;我们IdentityServer4的说明&#xff0c;认识到是一个基于OpenID Connect协议标准的身份认证和授权程序&#xff0c;并简单的对基础知识的认识以及区别说明&#xff0c;从OAuth、OpenID、OpenID Connect以及JWT等进行对比区别说明。而在这一篇中&…

网易年薪40W架构师面试题,欢迎自测!

一个月前被拉进了一个微信群&#xff0c;名字叫《明日都是大佬》&#xff0c;群里有20多个人&#xff0c;都是正在跳槽的&#xff0c;目标是年薪30w&#xff01;投简历、笔试、面试后都相互分享&#xff0c;互通有无你懂的。拉我进群是帮忙解答一些难题&#xff0c;很多题目还是…

leetcode257. 二叉树的所有路径(java递归详解)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

leetcode617. 合并二叉树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)

前言权限管控对于一个系统来说是非常重要的&#xff0c;最熟悉不过的是菜单权限和数据权限&#xff0c;上一节通过Jwt实现了认证&#xff0c;接下来用它实现接口权限的验证&#xff0c;为什么不是菜单权限呢&#xff1f;对于前后端分离而言&#xff0c;称其为接口权限感觉比较符…

.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

目录什么是软件架构软件架构的基本思路单体向分布式演进、云原生、技术中台1.1 什么是软件架构1.1.1 什么是架构&#xff1f;Software architecture {Elements, Forms, Rationale/Constraints}元素、形式/模式、基本原理和限制为什么需要软件架构&#xff1f;软件架构的终极目…

leetcode530. 二叉搜索树的最小绝对差

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

再分享 5 个 vs 调试技巧

前言 之前在《5 个非常实用的 vs 调试技巧》和《继续分享 5 个实用的 vs 调试技巧》中分享了 10 个我认为非常值得了解的 vs 调试技巧&#xff0c;本周继续分享 5 个很实用的调试技巧。1. 显示下一条语句 在调试时&#xff0c;遇到断点中断后&#xff0c;为了更加清楚的了解程…

leetcode501. 二叉搜索树中的众数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

网络知识 | 《图解HTTP》读书笔记(上)

【网络知识】| 作者 / Edison Zhou这是EdisonTalk的第293篇原创内容作为一个专业的IT技术人&#xff0c;一个Web应用开发者&#xff0c;不了解网络基础和协议&#xff0c;怎么能行&#xff1f;本文是我2016年阅读《图解HTTP》一书的读书笔记&#xff0c;希望对你有所帮助&#…