JavaLeedCode新手村学习1

2024-02-12 15:20
文章标签 java 学习 新手村 leedcode

本文主要是介绍JavaLeedCode新手村学习1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

JavaLeedCode新手村学习之第一天 day01

一.1.两数之和

题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

给定的代码:

class Solution {public int[] twoSum(int[] nums, int target) {}
}

示例 1:

输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] ==
9 ,返回 [0, 1] 。

我的解题思路
从这个示例上可以看出,可以对给定的数据进行穷举,用if判断对值判断,如果有正确的值则返回值对应的索引下标
实现代码:

class Solution {public int[] twoSum(int[] nums, int target) {//nums = [2,7,11,15], target = 9 //第一层循环:用于获取nums数组的每一位数for(int i = 0;i<nums.length;i++){//第二层循环:用于获取nums的每一位数与第一层循环的数相加for(int j = i + 1;j<nums.length;j++){//如果数组中有符合题目要求的情况,则返回下标if(nums[i] + nums[j] == target){return new int[]{i,j};}}}//如果遍历完后都没有符合要求的,直接返回nullreturn null;}
}

在这里插入图片描述
到这里,这一题就算成功解决了,但是我近期刚好学到了Map双列集合系列,发现这道题好像可以用键值对来更快的找到我们想要的值

实现代码:

class Solution {public int[] twoSum(int[] nums, int target) {//创建一个Map集合Map<Integer,Integer> m = new HashMap<>();//遍历数组for(int i = 0;i<nums.length;i++){//如果9-num[i]所得到的值在集合中存在,则返回下标if(m.containsKey(target - nums[i])){//返回满足条件的下标return new int[]{m.get(target - nums[i]),i};}//以数组的值为键,索引为值添加至集合中m.put(nums[i],i);}//如果遍历完后都没有符合要求的,直接返回nullreturn null;}
}

在这里插入图片描述
参考官方题解后,发现误差不大,第一题就成功解决了,其中第二种解法使用到的containsKey方法是HashMap中的一个方法

containsKey

public boolean containsKey(Objectkey)

如果此映射包含对于指定键的映射关系,则返回 true。
指定者: 接口 Map<K,V> 中的 containsKey
覆盖: AbstractMap<K,V> 中的 containsKey
参数: key - 要测试其是否在此映射中存在的键
返回: 如果此映射包含对于指定键的映射关系,则返回 true。

二.7.整数反转

题目: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。
如果反转后整数超过 32 位的有符号整数的范围 [ − 2 31 −2^{31} 231, 2 31 − 1 2^{31} − 1 2311] ,就返回 0。
假设环境不允许存储 64 位整数(有符号或无符号)。

示例 1:

输入:x = -123 输出:-321

我的解题思路
从示例中可以看出,只需要对1一个给定的数进行反转就行,但是符号不变,用取模的符号即可完成题目

取模(取余)
左操作数除以右操作数的余数
123%10等于3

class Solution {public int reverse(int x) {int newNum = 0;int tempNum;while (x != 0) {tempNum = x % 10;//取余x = x /10;//去尾newNum = newNum *10 + tempNum;//拼接}return newNum;}
}

但是题目中还提到,给定的数是有范围的,所以还需要对这个范围进行判断

class Solution {public int reverse(int x) {int newNum = 0;while (x != 0) {if (newNum < Integer.MIN_VALUE || newNum > Integer.MAX_VALUE) {return 0;}int tempNum = x % 10;x /= 10;newNum = newNum * 10 + tempNum;}return newNum;}
}

三.9.回文数

题目: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。

示例 1:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

我的解题思路
从示例和题目可以知道,只需要对x判断正反是否相同即可,所以可以用字符串进行判断

class Solution {public boolean isPalindrome(int x) {//如果x为负数则直接返回falseif (x < 0) {return false;}//将x转为字符串String t = x + "";//str用于拼接字符串String str = "";for (int i = t.length() - 1; i >= 0; i--) {str = str + t.charAt(i);}//比较与原字符串是否相同return t.equals(str);}
}

在提交后,发现运行时间在18ms往上,而其他大佬的速度只需要5ms
大佬的代码:

class Solution {public boolean isPalindrome(int x) {//如果x为负数则直接返回falseif(x<0){return false;}//用String中的valueOF方法将x转化为字符串String s = String.valueOf(x);int i=0;int j=s.length()-1;while(i<=j){//截取字符串://利用charAt://对字符串的首尾进行判断,如果对称位置的首尾不相同则返回falseif(s.charAt(i)==s.charAt(j)){i++;j--;}else{return false;}}return true;}
}

看完大佬的代码后,发现自己的思路还要慢慢学习改进!

四.13.罗马数字转整数

题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值
I           1
V          5
X          10
L          50
C          100
D          500
M          1000
例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。

我的解题思路:
首先观察一组罗马数字的规则:如LIVII,这个罗马数字的值为56,而这个罗马数字可以拆分一下,变成L+IV+I+I,而IV这个数字又可以等价于前一个数字-I+V,最后,这个罗马数字的值计算过程就是L-I+V+I+I=50-1+5+1+1=56
所以只需要判断一个罗马数字的当前字符与后一个字符的关系即可以决定用加法还是减法
实现代码:

public int romanToInt(String s) {//1.添加规则HashMap<Character,Integer> hm = new HashMap<>();hm.put('I',1);hm.put('V',5);hm.put('X',10);hm.put('L',50);hm.put('C',100);hm.put('D',500);hm.put('M',1000);//2.求罗马数字的和int sum = 0;int len = s.length();//len = 5for (int i = 0; i < len; i++) {Integer value = hm.get(s.charAt(i));//判断当前字符是否是最后一个字符,以及与后一个字符的大小关系//如果当前字符小于后一个字符,则用减法if (i < len - 1 && hm.get(s.charAt(i)) < hm.get(s.charAt(i + 1))){sum = sum - value;}else {//如果当前字符大于后一个字符,则用加法sum = sum + value;}}return sum;}

今天的学习就结束啦!

这篇关于JavaLeedCode新手村学习1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702880

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S