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.hqwc.cn/news/457185.html

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

相关文章

ubuntu下修改hosts读写权限

ubuntu下修改hosts文件的操作&#xff1a; 由于需要在hosts文件下添加ip地址信息&#xff0c;但是初始情况下系统该文件为只读权限无法修改&#xff0c;具体操作如下所示&#xff1b; 1.cd到系统etc目录下&#xff0c;执行如下命令,此时会提示输入密码&#xff0c;直接输入回…

【C++】内存管理深入解析

目录 1. 内存的五大区域1.1 栈区&#xff08;Stack&#xff09;1.2 堆区&#xff08;Heap&#xff09;1.3 全局/静态存储区1.4 常量存储区1.5 代码区 2. 回顾c语言的动态内存管理2.1 malloc/calloc/realloc2.2 free 3. C中的新旧对话3.1 new3.2 delete 4. new/delete的实现原理…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Rating组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Rating组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Rating组件 提供在给定范围内选择评分的组件。 子组件 无。 接口 Rating(opt…

五、机器学习模型及其实现1

1_机器学习 1&#xff09;基础要求&#xff1a;所有的数据全部变为了特征&#xff0c;而不是eeg信号了 python基础已经实现了特征提取、特征选择&#xff08;可选&#xff09;进行了数据预处理.预处理指对数据进行清洗、转换等处理&#xff0c;使数据更适合机器学习的工具。S…

I.MX6u嵌入式linux驱动开发

1&#xff1a;Ubuntu 系统入门 当 Ubuntu 系统入门以后&#xff0c;我们重点要学的就是如何在 Linux 下进行 C 语言开发&#xff0c;如何使 用 gcc 编译器、如何编写 Makefile 文件等等 首先安装虚拟机软件VM&#xff1a; Vmware Workstation 软件可以在 Wmeare …

大华 DSS 数字监控系统 attachment_getAttList.action SQL 注入漏洞复现

0x01 产品简介 大华 DSS 数字监控系统是大华开发的一款安防视频监控系统,拥有实时监视、云台操作、录像回放、报警处理、设备管理等功能。 0x02 漏洞概述 大华 DSS存在SQL注入漏洞,攻击者 /portal/attachment_getAttList.action 路由发送特殊构造的数据包,利用报错注入获…

探索PostgreSQL:从基础到实践(简单实例)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 下载前言一、PostgreSQL是什么&#xff1f;二、使用步骤1.引入库2.读入数据 总结 下载 点击下载提取码888999 前言 在当今的大数据时代&#xff0c;数据库作为信…

8.0 Zookeeper 四字命令教程详解

zookeeper 支持某些特定的四字命令与其交互&#xff0c;用户获取 zookeeper 服务的当前状态及相关信息&#xff0c;用户在客户端可以通过 telenet 或者 nc&#xff08;netcat&#xff09; 向 zookeeper 提交相应的命令。 安装 nc 命令&#xff1a; $ yum install nc …

计算机网络——04接入网和物理媒体

接入网和物理媒体 接入网络和物理媒体 怎样将端系统和边缘路由器连接&#xff1f; 住宅接入网络单位接入网络&#xff08;学校、公司&#xff09;无线接入网络 住宅接入&#xff1a;modem 将上网数据调制加载到音频信号上&#xff0c;在电话线上传输&#xff0c;在局端将其…

COMSOL方法编辑器中产生随机数(可控制随机种子)

简介 COMSOL二次开发主要在方法编辑器中进行&#xff0c;编程语言为Java。有时需要产生随机数&#xff08;比如随机生成一些球体&#xff09;&#xff0c;方法编辑器中已经存在Math.random()可直接使用。 但是&#xff0c;对于某些特殊情况&#xff0c;我希望每次运行代码产生…

RTE2023第九届实时互联网大会:揭秘未来互联网趋势,PPT分享引领行业新思考

随着互联网的不断发展&#xff0c;实时互动技术正逐渐成为新时代的核心驱动力。 在这样的背景下&#xff0c;RTE2023第九届实时互联网大会如期而至&#xff0c;为业界人士提供了一个探讨实时互联网技术、交流创新理念的绝佳平台。 本文将从大会内容、PPT分享价值等方面&#…

java设计模式- 建造者模式

一 需求以及实现方式 1.1 需求描述 我们要创建一个表示汽车的复杂对象&#xff0c;汽车包含发动机、轮胎和座椅等部分。用传统方式创建&#xff0c;代码如下 1.2 传统实现方式 1.抽象类 public abstract class BuildCarAbstaract {//引擎public abstract void buildEng…