刷题笔记(第八天)

news/2025/2/23 6:52:57/
1. 请补全JavaScript代码,实现一个函数,要求如下:
  • 根据输入的数字范围[start,end]和随机数个数"n"生成随机数
  • 生成的随机数存储到数组中,返回该数组
  • 返回的数组不能有相同元素
    注意: 不需要考虑"n"大于数字范围的情况
    输入:getUniqueNums(2,10,4)
    输出:[4,6,2,8]
const _getUniqueNums = (start,end,n) => {let a = [];let count = 0;while (count < n) {let x = Math.floor(Math.random() * (end - start) + start)if (a.indexOf(x) === -1) {a.push(x);count++;}}return a;
}

解题思路:Math.random()*(end-start)+start生成指定范围内的随机数 并且使用Math.floor()转化为整数,判断该数字是否存在于数组中,不存在则将该数字存为数组,直到数组长度为n。

2. 两数相加给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

  • 输入:l1 = [2,4,3], l2 = [5,6,4]
  • 输出:[7,0,8]
  • 解释:342 + 465 = 807.

解题思路:l1l2两个链表同时从头结点遍历取值,相加,如果两数相加大于0,下一个要相加的数要注意进位,计算得到一个数、便存入链表中,最后将

/*** Definition for singly-linked list.* function ListNode(val, next) {*     this.val = (val===undefined ? 0 : val)*     this.next = (next===undefined ? null : next)* }*/
var addTwoNumbers = function (l1, l2) {let node = new ListNode('0');let head = node;let add = 0;while(l1 || l2 || add) {let a = l1===null ? 0 : l1.val;let b = l2===null ? 0 : l2.val;let s = a + b + add;add = s >=10 ? 1 : 0;node.next = new ListNode(s % 10);node = node.next;if (l1) l1=l1.next;if (l2) l2=l2.next;}return head.next;
};
3. 整数反转:给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。

输入:x = 123 输出:321
输入:x = -123 输出:-321
输入:x = 120 输出:21

/*** @param {number} x* @return {number}*/
var reverse = function (x) {let sum = 0;let max = Math.pow(2, 31) - 1, min = -max - 1;if (x < min || x > max) {return 0;}while (x != 0) {let a = x % 10;x = parseInt(x / 10);sum = sum * 10 + a;}if(sum > max || sum < min) {return 0;}return sum;};
4. 盛水最多的容器

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。

/*** @param {number[]} height* @return {number}*/
var maxArea = function(height) {let left=0;let right=height.length-1;let maxArea=0;while(left<right) {let currentArea=(right-left)*Math.min(height[left],height[right]);maxArea = maxArea > currentArea ? maxArea : currentArea;if (height[left]<height[right]) {left++;} else {right--;}}return maxArea;
};
5. 整数转罗马数字

例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  1. I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
  2. X 可以放在 L (50) 和 C (100) 的左边,来表示40 和 90。
  3. C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
    给你一个整数,将其转为罗马数字。
  • 示例1
    • 输入: num = 3
    • 输出: “III”
  • 示例2
    • 输入: num = 4
    • 输出: “IV”
/*** @param {number} num* @return {string}*/
var intToRoman = function(num) {let qian = ['','M','MM','MMM']; // 分别表示0,一千、两千、三千 (1<=num<=3999) let bai = ['','C','CC','CCC','CD','D','DC','DCC','DCCC','CM'];let shi = ['','X','XX','XXX','XL','L','LX','LXX','LXXX','XC'];let ge = ['','I','II','III','IV','V','VI','VII','VIII','IX'];let q = Math.floor(num/1000);let b = Math.floor(num/100%10);let s = Math.floor(num/10%10);let g = Math.floor(num%10);return qian[q] + bai[b] + shi[s] + ge[g];
};
6. 罗马数字转整数
  • 示例1
    • 输入: s = “III”
    • 输出: 3
  • 示例 2:
    • 输入: s = “IV”
    • 输出: 4
  • 示例 3:
    • 输入: s = “IX”
    • 输出: 9
/*** @param {string} s* @return {number}*/
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;
};

http://www.ppmy.cn/news/1234442.html

相关文章

电子学会C/C++编程等级考试2022年12月(一级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:加一 输入一个整数x,输出这个整数加1后的值,即x+1的值。 时间限制:1000 内存限制:65536输入 一个整数x(0 ≤ x ≤ 1000)。输出 按题目要求输出一个整数。样例输入 9样例输出 10 答案: //参考答案: #include<bits/st…

docker启动链接sqlservr的镜像时报SSl错误

本次部署中遇到了老项目中的 net core 5.0 docker 镜像访问sql server 出现SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.问题 Microsoft.Data.SqlClient.SqlException (0x80131904): A connection was successfully established with the server, but then an e…

一种全新且灵活的 Prompt 对齐优化技术

并非所有人都熟知如何与 LLM 进行高效交流。 一种方案是&#xff0c;人向模型对齐。 于是有了 「Prompt工程师」这一岗位&#xff0c;专门撰写适配 LLM 的 Prompt&#xff0c;从而让模型能够更好地生成内容。 而另一种更为有效的方案则是&#xff0c;让模型向人对齐。 这也是…

【docker】docker总结

一、Docker简介 Docker是开源应用容器引擎&#xff0c;轻量级容器技术。基于Go语言&#xff0c;并遵循Apache2.0协议开源Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的Linux系统上&#xff0c;也可以实现虚拟化容…

SpringBoot整合Redis,redis连接池和RedisTemplate序列化

SpringBoot整合Redis 1、SpringBoot整合redis1.1 pom.xml1.2 application.yml1.3 配置类RedisConfig&#xff0c;实现RedisTemplate序列化1.4 代码测试 2、SpringBoot整合redis几个疑问&#xff1f;2.1、Redis 连接池讲解2.2、RedisTemplate和StringRedisTemplate 3、RedisTemp…

Navmesh 寻路

用cocos2dx引擎简单实现了一下navmesh的多边形划分&#xff0c;然后基于划分多边形的a*寻路。以及路径拐点优化算法 用cocos主要是方便使用一些渲染接口和定时器。重点是实现的原理。 首先画了一个带有孔洞的多边形 //多边形的顶点数据Vec2(100, 100),Vec2(300, 200),Vec2(50…

postgreSQL如何快速查询大表数据量

文章目录 场景方案结果 场景 我有一个非常大的表&#xff0c;估计几百万或者几千万。 我开始使用了 select count(*) from my_table_javapub 方式&#xff0c;查询非常慢。 如何解决&#xff1f;&#xff1f;&#xff1f; 方案 如果你需要更快地获取表中的行数&#xff0c…

23届万兴校招golang一面面经

问题有结合我的简历来问,面试官还是很友好的 1、你是如何学习go的(扩展讲) go语言的基本概念和语法&#xff0c;上手golang开源项目跟架构(gin,gorm)&#xff0c;资料找官网。 2、项目深挖 为什么选择gin? Gin路由使用了前缀树算法&#xff0c;beego路由使用的正则算法和较为重…