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

相关文章

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Java对异常的认识与异常的处理小结

《Java对异常的认识与异常的处理小结》Java程序在运行时可能出现的错误或非正常情况称为异常,下面给大家介绍Java对异常的认识与异常的处理,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参... 目录一、认识异常与异常类型。二、异常的处理三、总结 一、认识异常与异常类型。(1)简单定义-什么是

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

java Long 与long之间的转换流程

《javaLong与long之间的转换流程》Long类提供了一些方法,用于在long和其他数据类型(如String)之间进行转换,本文将详细介绍如何在Java中实现Long和long之间的转换,感... 目录概述流程步骤1:将long转换为Long对象步骤2:将Longhttp://www.cppcns.c

SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程

《SpringBoot集成LiteFlow实现轻量级工作流引擎的详细过程》LiteFlow是一款专注于逻辑驱动流程编排的轻量级框架,它以组件化方式快速构建和执行业务流程,有效解耦复杂业务逻辑,下面给大... 目录一、基础概念1.1 组件(Component)1.2 规则(Rule)1.3 上下文(Conte

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过