当前位置: 首页 > news >正文

刷题笔记(第五天)

1. 给定一个罗马数字,将其转换成整数。

罗马数字包含以下七种字符: 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。

输入: s = "III"  输出: 3

输入: s = "IV"  输出: 4

输入: s = "IX" 输出: 9

var romanToInt = function(s) {let m=new Map([['I',1],['V',5],['X',10],['L',50],['C',100],['D',500],['M',1000]]);let res=0;for(let i=0;i<s.length;i++) {let left=m.get(s[i]);let right=m.get(s[i+1]);res+=left<right?-left:left;// 题意就是:当左侧小于右侧 右侧-左侧;当左侧大于右侧 左侧+右侧}return res;
};

2. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。数组中同一个元素在答案里不能重复出现。

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

var twoSum = function(nums, target) {if (nums.length > 0) {let o = nums[0];let t = nums[0];for (let i = 0; i < nums.length; i++) {for (let j = i + 1; j < nums.length; j++) {if (nums[i] + nums[j] === target) {o = i;t = j;}}}return [o, t]} else {return [-1, -1]}
}

3.给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

这个题官方解答用了“滑动窗口”,后面要再仔细看一下。

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。


var lengthOfLongestSubstring = function (s) {if (s.length === 0 || s.length === 1) {return s.length;} else {let s1 = '';let a = [];for (let i = 0; i < s.length; i++) {if (s1.includes(s.charAt(i)) === true) {s1 += s.charAt(i)// console.log(a, a.length);// console.log(s1.length, i);i = i - s1.length + 1// console.log(i);s1 = '';// console.log(i);} else {s1 += s.charAt(i);}a.push(s1.length)}console.log(a);let m = a[0];for (let i = 0; i < a.length; i++) {if (m < a[i]) {m = a[i]}}return m;}
};

每一次要将存储最长子串的变量s1置空的时候,将该子串的长度存入数组a中、同时要注意将i退回(i-s1.length+1),最后找出数组a中最大元素,即最长子串的长度。

以下是其他人的解答,感觉更简单易懂:

var lengthOfLongestSubstring = function(str) {if (str.length <= 1) {return str.length}let left = 0let right = 1let max = 0let tempwhile(right<str.length){temp = str.slice(left, right)if (temp.indexOf(str.charAt(right)) > -1) {left++continue} else {right++}if (right - left > max) { max = right - left }}return max
};// 作者:Romantic Ardinghellix4s
// 链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/
// 来源:力扣(LeetCode)

http://www.lryc.cn/news/226762.html

相关文章:

  • 【OpenHarmony内核】Harmony内核互斥性信号量
  • 给OFFICE增加一个功能搜索
  • 53基于matlab的Tamura纹理特征提取
  • C++初阶--类与对象(3)(图解)
  • 考研分享第1期 | 末9生物跨专业考研北京大学电子信息404分经验分享
  • openGauss学习笔记-120 openGauss 数据库管理-设置密态等值查询-概述及使用gsql操作密态数据库
  • 软件自动化测试平台
  • springMVC 导出Excel ,并提供下载(处理日期格式问题)
  • 软件工程理论与实践 (吕云翔) 第二章软件过程 课后习题及其答案
  • HTML跳转锚点
  • 新能源汽车高压线束是如何快速连接到测试设备上进行电性能测试的
  • Azure 机器学习 - 使用受保护工作区时的网络流量流
  • 强化学习中蒙特卡罗方法
  • Pytorch从零开始实战09
  • Milvus Cloud ——Agent 的展望
  • EM@比例恒等式@分式恒等式
  • 使用米联客FPGA开发板进行光口开发时遇到的问题总结
  • 【chat】 1:Ubuntu 20.04.3 编译安装moduo master分支
  • C#基于inpoutx64读写ECRAM硬件信息
  • 图论13-最小生成树-Kruskal算法+Prim算法
  • 免费博客搭建笔记
  • 网络运维Day10
  • @Cacheable 注解的 @CacheManager 示例
  • springboot二维码示例
  • nacos做服务配置和服务器发现
  • KCC@广州与 TiDB 社区联手—广州开源盛宴
  • CSS3 分页、框大小、弹性盒子
  • GEE问题——GEE中循环的使用map()函数,以提取指定范围内的逐日的二氧化氮平均浓度为例
  • 短信验证码实现(阿里云)
  • 如何对element弹窗进行二次封装