Leetcode刷题-(11~15)-Java+Python+JavaScript

算法是程序员的基本功,也是各个大厂必考察的重点,让我们一起坚持写算法题吧

遇事不决,可问春风,春风不语,即是本心。

我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。

目录

1.盛最多水的容器

2.整数转罗马数字

3.罗马数字转整数

4.最长公共前缀

5.三数之和


1.盛最多水的容器

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/container-with-most-water/description/

思路:双指针,从两侧往中间遍历,每次短的那个边往中间走,计算整个过程中最大的面积即可。

Java版:

class Solution {public int maxArea(int[] height) {int max = 0 ;int left = 0, right = height.length - 1 ;while(left < right){int h = Math.min(height[left], height[right]) ;int area = h * (right - left) ;max = max < area ? area : max ; while(left < right && height[left] <= h){left ++ ;}while(left < right && height[right] <= h){right -- ;}}return max ;
}
}

Python版:

class Solution:def maxArea(self, height: List[int]) -> int:max = 0 left = 0right = len(height) - 1while left < right:h = min(height[left], height[right])area = h * (right - left)if area >= max:max = areawhile left < right and height[left] <= h:left += 1while left < right and height[right] <= h:right -= 1return max 

Js版:

/*** @param {number[]} height* @return {number}*/
var maxArea = function(height) {let max = 0 let left = 0, right = height.length - 1while(left < right){const h = Math.min(height[left], height[right])const area = h * (right - left)max = max <= area ? area : max while(left < right && height[left] <= h){left ++ }while(left < right && height[right] <= h){right -- }}return max 
};
2.整数转罗马数字

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/integer-to-roman/description/

思路:一共13种罗马数字,针对当前数字,每次找出不大于当前的数字的最大罗马数字,每次拼接该罗马数字,当前数字减去对应的值。

Java版:

class Solution {public String intToRoman(int num) {int [] key = {1,4,5,9,10,40,50,90,100,400,500,900,1000} ;String [] value = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"} ;String ans = "" ;for(int i=key.length-1; i>=0; i--){while(key[i] <= num){num -= key[i] ;ans += value[i] ;}}return ans ;}
}

Python版:

class Solution:def intToRoman(self, num: int) -> str:key = [1,4,5,9,10,40,50,90,100,400,500,900,1000]value = ["I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"]key.reverse()value.reverse()s = ""for i in range(len(key)):element = key[i]while num >= element:num -= elements += value[i]return s

Js版:

/*** @param {number} num* @return {string}*/
var intToRoman = function(num) {const key = [1000,900,500,400,100,90,50,40,10,9,5,4,1]const value = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]let res = ""for(let i=0; i<key.length; i++){while(num >= key[i]){res += value[i] num -= key[i] }} return res 
};
3.罗马数字转整数

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/roman-to-integer/description/

思路:从后向前遍历字符串,判断当前字符代表的数字是否大于等于上一个,满足条件就累加,否则就累减,每次更新当前字符所代表的值以及上一个字符所代表的值。

Java版:

class Solution {public int romanToInt(String s) {int value =0,  num1 = 0,  num2 = 0 ;for(int i=s.length()-1; i>=0; i--){switch(s.charAt(i)){case 'I' : num1 = 1; break;case 'V' : num1 = 5; break ;case 'X' : num1 = 10; break ;case 'L' : num1 = 50; break ;case 'C' : num1 = 100; break ;case 'D' : num1 = 500; break ;case 'M': num1 = 1000; break ;}if(num1 >= num2){value += num1 ;}else{value -= num1 ;}num2 = num1 ;}return value ;}
}

Python版:

class Solution:def romanToInt(self, s: str) -> int:value = num1 = num2 = 0 s1 = s[::-1]for c in s1:if c == 'I': num1 = 1if c == 'V': num1 = 5if c == 'X': num1 = 10if c == 'L': num1 = 50 if c == 'C': num1 = 100if c=='D': num1 = 500if c=='M': num1 = 1000if num1 >= num2:value += num1else:value -= num1 num2 = num1return value 

JS版:

/*** @param {string} s* @return {number}*/
var romanToInt = function(s) {let value = 0, num1 = 0, num2 = 0for(let i=s.length-1; i>=0; i--){switch(s.charAt(i)){case 'I' : num1 = 1; break ;case 'V' : num1 = 5; break ;case 'X' : num1 = 10; break;case 'L': num1 = 50; break ;case 'C': num1 = 100; break ;case 'D': num1 = 500; break ;case 'M': num1 = 1000; break ;}if(num1 >= num2){value += num1 }else{value -= num1 }num2 = num1 }return value 
};

4.最长公共前缀

题目连接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/longest-common-prefix/description/

思路:写一个求两个字符串公共前缀和的方法,然后用该方法依次比对当前公共前缀与下一个字符串的公共前缀即可。
Java版:

class Solution {public String commonPrefix(String s1, String s2){if(s1.length() > s2.length()){String tmp = s1 ;s1 = s2 ;s2 = tmp ;}for(int i=0; i<s1.length(); i++){if(s1.charAt(i) != s2.charAt(i)){return s1.substring(0,i) ;}}return s1 ;}public String longestCommonPrefix(String[] strs) {String ans = strs[0] ;for(int i=1; i<strs.length; i++){ans = commonPrefix(ans, strs[i]) ;}return ans ;}
}

Python版:

class Solution:def longestCommonPrefix(self, strs: List[str]) -> str:prefix = strs[0]for i in range(1,len(strs)):prefix = self.commonPrefix(prefix, strs[i])return prefixdef commonPrefix(self, s1, s2):if len(s1) > len(s2):tmp = s1s1 = s2s2 = tmpfor i in range(len(s1)):if s1[i] != s2[i]:return s1[0:i]return s1

Js版:

/*** @param {string[]} strs* @return {string}*/
var longestCommonPrefix = function(strs) {let prefix = strs[0]for(let i=1; i<strs.length; i++){prefix = commonPrefix(prefix, strs[i])}return prefix
};
var commonPrefix = function(s1, s2){if(s1.length > s2.length){const tmp = s1 s1 = s2 s2 = tmp }for(let i=0; i<s1.length; i++){if(s1.charAt(i) != s2.charAt(i)){return s1.substring(0,i) }}return s1 
};

5.三数之和

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/3sum/description/

思路:排序+双指针,当前指针固定最左侧,另外两个指针分别在中间和右侧。

Java版:

class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums) ;List<List<Integer>>  ans = new ArrayList<>() ;for(int i=0; i<nums.length-1; i++){int cur = nums[i] ;int left = i+1, right = nums.length - 1 ;if(i>0 && nums[i] == nums[i-1]){continue ;}while(left < right){int res = cur + nums[left] + nums[right] ;if(res == 0){List<Integer> tmp = new ArrayList<>() ;tmp.add(nums[left]) ;tmp.add(cur) ;tmp.add(nums[right]) ;while(left < right && nums[left] == nums[left+1]){left ++ ;}while(left < right && nums[right] == nums[right - 1]){right -- ;}ans.add(tmp) ;left ++ ;right -- ;}else if(res > 0){right -- ;}else{left ++ ;}}}return ans ;}
}

python版:

class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:ans = []nums.sort()for i in range(len(nums)):if i>0 and nums[i] == nums[i-1]:continuecur = nums[i]left = i+1right = len(nums) - 1while left < right:res = cur + nums[left] + nums[right]if res == 0:tmp = []tmp.append(cur)tmp.append(nums[left])tmp.append(nums[right])while left < right and nums[left] == nums[left+1]:left += 1while left < right and nums[right] == nums[right-1]:right -= 1ans.append(tmp)left += 1right -= 1elif res > 0:right -= 1else:left += 1return ans

Js版:

/*** @param {number[]} nums* @return {number[][]}*/
var threeSum = function(nums) {const ans = []// js对负数进行排序const nums1 = nums.sort(function(a,b){return a - b})for(let i=0; i<nums1.length; i++){if(i>0 && nums1[i-1] == nums1[i]){continue }let cur =  nums1[i]let left = i + 1let right = nums1.length - 1while(left < right){const res = cur + nums1[left] + nums1[right]if(res == 0){tmp = []tmp.push(cur)tmp.push(nums1[left])tmp.push(nums1[right])while(left < right && nums1[left] == nums1[left + 1]){left ++}while(left < right && nums1[right] == nums1[right - 1]){right --}ans.push(tmp)left ++ right --}else if(res > 0){right -- }else{left ++ }}}return ans
};

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

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

相关文章

考研数据结构笔记(3)

顺序表存储结构 存储结构顺序结构定义基本操作的实现静态分配问题 动态分配代码功能 顺序表的特点: 顺序表小结顺序表的插入删除插入删除小结 顺序表的查找按位查找按值查找小结 存储结构 顺序结构 定义 线性表是具有相同数据类型的n(n>0)个数据元素的有限序列(每个数据元素…

JavaScript流程控制详解之循环结构(倒三角、九九乘法表)

循环结构 在JavaScript中&#xff0c;循环语句指的是在满足某个条件下重复执行 指定的一段代码。若条件结果为true,则重复执行&#xff0c;则进入循环&#xff0c;否则结束循环。 在JavaScript中&#xff0c;循环语句如下&#xff1a; while语句do…while语句for语句 while…

shell脚本基础语法(.sh ./ sh bash source shell)

Linux 之 Shell 脚本基础语法 0. 学习一门语言的顺序 1. Shell 编程概述 1.1 Shell 名词解释 在 Linux 操作系统中&#xff0c;Shell 是一个命令行解释器&#xff0c;它为用户提供了一个与操作系统内核交互的界面。用户可以通过 Shell 输入命令&#xff0c;然后 Shell 将这些…

ONLYOFFICE 文档开发者版 8.0:API和文档生成器更新

随着 8.0 版新功能的发布&#xff0c;我们更新了编辑器、文档生成器和插件的 API。请阅读本文了解详情。 PDF 支持 我们在 documentType 参数中添加了 pdf 文档这一类型。现在完全支持PDF文件*&#xff0c;包括含有可填写字段的文件&#xff0c;并且可以在ONLYOFFICE PDF 编辑…

深入了解Spring Expression Language(SpEL)

深入了解Spring Expression Language&#xff08;SpEL&#xff09; Spring Expression Language&#xff08;SpEL&#xff09;是Spring框架中强大的表达式语言&#xff0c;它在运行时提供了一种灵活的方式来评估字符串表达式。SpEL的设计目标是在各种Spring配置和编程场景中提供…

亚马逊AWS考试认证系列 - Retake是考试的坚强后盾

为什么说Retake是考试的坚强后盾&#xff1f; 在AWS的认证考试体系里面&#xff0c;Retake 是一次重考的机会&#xff0c;允许考生在第一次未通过考试的情况下&#xff0c;再次免费参加考试&#xff0c;注意是免费的。这为考生提供了一个机会来重新准备并且免费再次进行考试。…

【数据库】Unlogged 表使用

【数据库】Unlogged 表使用 前言普通表和Unlogged 表的写性能比较普通表创建和数据插入Unlogged 表创建和数据插入比较结果 Unlogged 表崩溃和正常关闭测试Unlogged 表特点总结 前言 大神偶像在开会上提及了Unlogged 表&#xff0c;它的特点很不错&#xff0c;很适合实时数据保…

关于域名递归解析服务的问题

域名递归解析服务是互联网基础设施的重要组成部分&#xff0c;它允许用户通过域名来访问网站或应用程序。然而&#xff0c;在某些情况下&#xff0c;域名递归解析服务可能会出现问题&#xff0c;导致用户无法正常访问网站或应用程序。本文将探讨域名递归解析服务可能面临的问题…

elementPlus实现动态表格单元格合并span-method方法总结

最近在做PC端需求的时候&#xff0c;需要把首列中相邻的同名称单元格合并。 我看了一下elementPlus官网中的table表格&#xff0c;span-method可以实现单元格合并。 我们先看一下官网的例子&#xff1a; 合并行或列 多行或多列共用一个数据时&#xff0c;可以合并行或列。 …

【附代码】NumPy加速库NumExpr(大数据)

文章目录 相关文献测试电脑配置数组加减乘除数组乘方Pandas加减乘除总结 作者&#xff1a;小猪快跑 基础数学&计算数学&#xff0c;从事优化领域5年&#xff0c;主要研究方向&#xff1a;MIP求解器、整数规划、随机规划、智能优化算法 如有错误&#xff0c;欢迎指正。如有…

Java 学习和实践笔记(2)

今天的学习进度&#xff1a; 注册并下载安装好了Java 8&#xff0c;之后进行以下配置。 1&#xff09;path 是一个常见的环境变量&#xff0c;它告诉系统除了在当前的目标下妹寻找此程序外&#xff0c;还可以到path指定的目录下找。 2&#xff09;Java Home 为以后其他的软…

共享网盘系统PHP源码

新V5.0版本&#xff0c;支持上传视频、支持视频播放、支持共享&#xff0c;也可以自己用。 可以自动生成视频外链&#xff0c;下载地址&#xff0c;播放器代码&#xff0c;html代码&#xff0c;ubb代码等等。 使用方法&#xff1a; 源码上传到服务器&#xff0c;打开网站根据…

Zoho Creator低代码平台:克服移动应用开发四大挑战的利器

多年来&#xff0c;移动应用程序开发经历了翻天覆地的变化。手机屏幕上充斥着手机制造商开发的预构建应用程序的日子已经一去不复返了。今天&#xff0c;由无数应用程序开发人员开发的各种类型的应用程序主宰了您的移动设备。 除了多个操作系统之外&#xff0c;设备还具有各种…

mac协议远程管理软件:Termius for Mac 8.4.0激活版

Termius是一款远程访问和管理工具&#xff0c;旨在帮助用户轻松地远程连接到各种服务器和设备。它适用于多种操作系统&#xff0c;包括Windows、macOS、Linux和移动设备。 该软件提供了一个直观的界面&#xff0c;使用户可以通过SSH、Telnet和Mosh等协议连接到远程设备。它还支…

最新GPT4.0使用教程,AI绘画-Midjourney绘画,GPT语音对话使用,DALL-E3文生图+思维导图一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

有趣的CSS - 多彩变化的按钮

目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页面渲染效果 整体效果 这个按钮效果主要使用 :hover 、:active 伪选择器以及 animation 、transition 属性来让背景色循环快速移动形成视觉效果。 核心代码部分&#xff0c;简要说明了写法思路&…

【leetcode】深搜、暴搜、回溯、剪枝(C++)1

深搜、暴搜、回溯、剪枝&#xff08;C&#xff09;1 一、全排列1、题目描述2、代码3、解析 二、子集1、题目描述2、代码3、解析 三、找出所有子集的异或总和再求和1、题目描述2、代码3、解析 四、全排列II1、题目解析2、代码3、解析 五、电话号码的字母组合1、题目描述2、代码3…

Python数据可视化库之ggplot使用详解

概要 数据可视化是数据分析和数据沟通的关键部分。Python 作为一门强大的数据科学和数据分析工具,提供了多种数据可视化库,其中之一就是 ggplot。ggplot 是一个基于 ggplot2 的 Python 数据可视化库,它可以创建精美且高度可定制的图表,以更好地理解和传达数据。本文将深入…

Java实现音乐平台 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首音乐4.2 新增音乐4.3 新增音乐订单4.4 查询音乐订单4.5 新增音乐收藏 五、免责说明 一、摘要 1.1 项目介绍 基于微信小程序JAVAVueSpringBootMySQL的音乐平台&#xff0c;包含了音乐…

Java玩转《啊哈算法》纸牌游戏之小猫钓鱼

缘起性空 文章目录 缘起代码地址纸牌游戏分析代码演示优化 缘起 各位小伙伴们好呀&#xff0c;还有几天就要过年了&#xff0c;祝大家新年快乐&#xff0c;万事胜意&#xff01; 本人最近看了下《啊哈算法》&#xff0c;确实阔以。 但稍显遗憾的是&#xff0c;书籍示例代码是…