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编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis