华为算法题 go语言或者ptython

1

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

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

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

package mainimport "fmt"func twoSum(nums []int, target int) []int {numMap := make(map[int]int) // 前一个是键,后一个int是值,map是映射// 遍历数组 nums,i 是当前元素的索引,num 是当前元素的值for i, num := range nums {complement := target - num// j:这是从 numMap 中获取的与 complement 对应的值if j, ok := numMap[complement]; ok {// []int{j, i} 是一个整数切片的初始化.返回一个包含两个整数的切片,第一个整数是 j,第二个整数是 ireturn []int{j, i}}numMap[num] = i}return nil
}func main() {nums1 := []int{2, 7, 11, 15}target1 := 9result1 := twoSum(nums1, target1)fmt.Println(result1)nums2 := []int{3, 2, 4}target2 := 6result2 := twoSum(nums2, target2)fmt.Println(result2)
}

2

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

package mainimport "fmt"// 表示链表节点的数据结构
type ListNode struct {Val  intNext *ListNode
}// 接受两个非空链表,表示两个非负整数,返回它们的和的链表
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {// create 一个虚拟头节点dummyHead := &ListNode{}// create 一个指针current := dummyHead// 进位标志carry := 0// 遍历两个链表,直到两个链表都遍历完并且没有进位为止for l1 != nil || l2 != nil || carry > 0 {// 计算当前位的数字总和sum := carryif l1 != nil {sum += l1.Vall1 = l1.Next}if l2 != nil {sum += l2.Vall2 = l2.Next}// 更新进位  ,注意这里如果小于10carry就是0,否则为1carry = sum / 10// 创建新节点存储当前位的数字current.Next = &ListNode{Val: sum % 10}// 将指针移动到下一个节点current = current.Next}// 返回结果链表的头节点的下一个节点(跳过虚拟头节点)return dummyHead.Next
}// 用于打印链表的值,方便查看结果
func printLinkedList(node *ListNode) {for node != nil {fmt.Print(node.Val)if node.Next != nil {fmt.Print("->")}node = node.Next}fmt.Println()
}func main() {// 实例1l1 := &ListNode{Val: 2, Next: &ListNode{Val: 4, Next: &ListNode{Val: 3}}}l2 := &ListNode{Val: 5, Next: &ListNode{Val: 6, Next: &ListNode{Val: 4}}}result := addTwoNumbers(l1, l2)printLinkedList(result)
}

3

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

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

输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

假设我们有一个字符串:s = "abcabcbb"

我们开始遍历这个字符串,使用一个“盒子”来存储不重复的字符。

  1. 我们从字符串的开头开始,第一个字符是 ‘a’,我们放入盒子中,盒子内有:[a],目前盒子的长度为1。
  2. 接着是 ‘b’,我们放入盒子中,盒子内有:[a, b],目前盒子的长度为2。
  3. 然后是 ‘c’,我们放入盒子中,盒子内有:[a, b, c],目前盒子的长度为3。
  4. 然后又是 ‘a’,在这里我们发现盒子内已经有了 ‘a’,所以我们需要重新开始计算盒子。我们将 ‘a’ 上一次出现的位置后面的字符都去掉,得到新的盒子内容为 [b, c, a],目前盒子的长度为3。
  5. 然后是 ‘b’,我们放入盒子中,盒子内有:[b, c, a],目前盒子的长度为3。
  6. 接着是 ‘c’,我们发现 ‘c’ 已经在盒子中了,所以我们需要重新开始计算盒子。我们将 ‘c’ 上一次出现的位置后面的字符都去掉,得到新的盒子内容为 [a, b, c],目前盒子的长度为3。
  7. 最后是 ‘b’,我们放入盒子中,盒子内有:[a, b, c],目前盒子的长度为3。

我们遍历完整个字符串后,最长的不含重复字符的子串就是 “abc”,它的长度为 3。

package mainimport "fmt"
// start 和 i 分别表示当前不含重复字符的子串的起始位置和结束位置。lastI 表示字符上一次出现的位置。func lengthOfLongestSubstring(s string) int {// 使用 map 存储字符最后出现的位置lastOccurred := make(map[byte]int)start, maxLength := 0, 0// 遍历字符串for i, ch := range []byte(s) {// 如果字符已经出现过,并且出现位置在当前子串中if lastI, ok := lastOccurred[ch]; ok && lastI >= start {start = lastI + 1 // 更新子串起始位置}// 更新字符最后出现的位置lastOccurred[ch] = i// 更新最大子串长度if i-start+1 > maxLength {maxLength = i - start + 1}}return maxLength
}func main() {s1 := "abcabcbb"fmt.Println(lengthOfLongestSubstring(s1))
}

4

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。

算法的时间复杂度应该为 O(log (m+n)) 。
示例 1:

输入:nums1 = [1,3], nums2 = [2]
输出:2.00000
解释:合并数组 = [1,2,3] ,中位数 2
示例 2:

输入:nums1 = [1,2], nums2 = [3,4]
输出:2.50000
解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5

# 双斜杠 // 表示整数除法,它会将结果向下取整为最接近的整数
class Solution(object):def findMedianSortedArrays(self, nums1, nums2):""":type nums1: List[int]  # 接受的第一个有序数组:type nums2: List[int]  # 接受的第二个有序数组:rtype: float           # 返回值为中位数的浮点数"""m = len(nums1)  # 第一个数组的长度n = len(nums2)  # 第二个数组的长度for num in nums2:nums1.append(num)  # 将 nums2 中的所有元素添加到 nums1 中nums1.sort()  # 将合并后的 nums1 数组进行排序i = len(nums1)  # 合并后数组的长度if i % 2 == 0:  # 如果数组长度为偶数a = nums1[i // 2]  # 取中间两个数中的后一个数b = nums1[i // 2 - 1]  # 取中间两个数中的前一个数k = (float(a) + b) / 2  # 计算中位数else:  # 如果数组长度为奇数k = nums1[(i) // 2]  # 取中间的那个数作为中位数return k  # 返回中位数

5

给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:

输入:s = “cbbd”
输出:“bb”

class Solution:def longestPalindrome(self, s: str) -> str:n = len(s)  # 字符串长度if n < 2:  # 如果字符串长度小于2,直接返回字符串本身return s# 创建一个包含 n 行的列表,每行包含 n 个元素,每个元素都是 Falsedp = [[False] * n for _ in range(n)]  # 创建一个二维数组,用于存储子串是否为回文串的状态start, max_len = 0, 1  # 记录最长回文子串的起始位置和长度,默认为第一个字符和长度为1# 初始化长度为1和2的回文子串for i in range(n):dp[i][i] = Trueif i < n - 1 and s[i] == s[i + 1]:dp[i][i + 1] = Truestart = imax_len = 2# 从长度为3开始遍历,更新状态数组dpfor length in range(3, n + 1):for i in range(n - length + 1):j = i + length - 1  # 子串的结束位置if s[i] == s[j] and dp[i + 1][j - 1]:  # 如果子串两端字符相等且去掉两端字符后仍为回文串dp[i][j] = Truestart = i  # 更新最长回文子串的起始位置max_len = length  # 更新最长回文子串的长度# start 是子串的起始索引。
# start + max_len 是子串的结束索引(不包括该索引对应的字符)。
# 因此,s[start:start + max_len] 表示从字符串 s 中提取子串,起始索引为 start,结束索引为 start + max_len - 1,
# 即提取了从 start 开始到 start + max_len - 1(包括起始索引,不包括结束索引)的子串。return s[start:start + max_len]  # 返回最长回文子串

6

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

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

相关文章

如何进行高性能架构的设计

一、前端优化 减少请求次数页面静态化边缘计算 增加缓存控制&#xff1a;请求头 减少图像请求次数&#xff1a;多张图片变成 一张。 减少脚本的请求次数&#xff1a;css和js压缩&#xff0c;将多个文件压缩成一个文件。 二、页面静态化 三、边缘计算 后端优化 从三个方面进…

adb-monkey命令

目录 adb shell monkey -p/-v 包名 次数 1、指定一个包 2、指定多个包 3、不指定包 Event percentages&#xff08;事件百分比&#xff09; 常见参数 --throttle 延迟时间 单位毫秒 --pct-touch 设定触屏事件生成的百分比 --pct-motion 设定滑动事件生成…

面试前端性能优化八股文十问十答第二期

面试前端性能优化八股文十问十答第二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;如何优化动画&#x…

c语言中的大小写字母转换怎么转?

在C语言中&#xff0c;大小写字母转换是基于ASCII码表的特性实现的。ASCII码中&#xff0c;小写字母从’a’到’z’的ASCII码值是连续的&#xff08;97到122&#xff09;&#xff0c;而大写字母从’A’到’Z’的ASCII码值也是连续的&#xff08;65到90&#xff09;。它们之间有…

Redis高性能原理

redis大家都知道拥有很高的性能&#xff0c;每秒可以支持上万个请求&#xff0c;这里探讨下它高性能的原理。单线程架构和io多路复用技术。 一&#xff0c;单线程架构 单线程架构指的是命令执行核心线程是单线程的&#xff0c;数据持久化、同步、异步删除是其他线程在跑的。re…

获取视频第一帧,以及后续上传

// 获取视频基本信息 const getVideoBasicInfo (videoSrc) > {return new Promise((resolve, reject) > {const video document.createElement("video");video.src videoSrc;// 视频一定要添加预加载video.preload "auto";// 视频一定要同源或者…

什么是系统工程(字幕)35

0 00:00:01,190 --> 00:00:02,840 下面的内容 1 00:00:04,850 --> 00:00:06,520 接下来呢就是 2 00:00:08,180 --> 00:00:09,830 16.6.1 3 00:00:11,070 --> 00:00:13,440 项流热平衡分析 4 00:00:15,350 --> 00:00:16,730 这一节 5 00:00:18,860 --> 0…

亿道丨三防平板丨加固平板丨三防加固平板丨改善资产管理

库存资产管理中最重要的部分之一是准确性&#xff1b;过时的库存管理技术会增加运输过程中人为错误、物品丢失或纸张损坏的风险。如今随着三防平板电脑的广泛使用&#xff0c;库存管理也迎来了好帮手&#xff0c;通过使用三防平板电脑能够确保库存管理、数据存储和记录保存的准…

React18源码: React调度中的3种优先级类型和Lane的位运算

优先级类型 React内部对于优先级的管理&#xff0c;贯穿运作流程的4个阶段&#xff08;从输入到输出&#xff09;&#xff0c;根据其功能的不同&#xff0c;可以分为3种类型&#xff1a; 1 &#xff09;fiber优先级(LanePriority) 位于 react-reconciler包&#xff0c;也就是L…

掌握 Android 中的 RecyclerView 优化

掌握 Android 中的 RecyclerView 优化 一、RecyclerView Pool以及何时使用它二、onCreateViewHolder 和 onBindViewHolder三、优化 RecyclerView 的不同方法四、视图无效与请求布局五、ViewHolder模式六、默认的废料和脏视图类型七、结论 RecyclerView 是 Android 中一个功能强…

【操作系统】磁盘存储空间的管理

实验5 磁盘存储空间的管理 一、实验目的 磁盘是用户存放程序和数据的存储设备&#xff0c;磁盘管理的主要目的是充分有效地利用磁盘空间。本实验模拟实现磁盘空间的分配与回收&#xff0c;使学生对磁盘空间的管理有一个较深入的理解。 二、实验内容 实验任务&#xff1a;用位…

FreeSWITCH debian11/12 apt安装

官方给的easy way安装方式如下&#xff1a; # 换成自己的token TOKENpat_ZrPXJQ8JNWsVQW2ubhnUwi7gapt-get update && apt-get install -y gnupg2 wget lsb-releasewget --http-usersignalwire --http-password$TOKEN -O /usr/share/keyrings/signalwire-freeswitch-…

#LLM入门|Prompt#1.2_提示原则_Guidelines

提示原则 一、编写清晰、具体的指令 使用分隔符清晰地表示输入的不同部分&#xff1a; 在Prompt中使用分隔符&#xff0c;如、“”"、< >、 、:等&#xff0c;将不同的文本部分区分开来&#xff0c;避免混淆和意外的结果。分隔符能够防止提示词注入&#xff0c;提…

petalinux_zynq7 驱动DAC以及ADC模块之四:python实现http_api

前文&#xff1a; petalinux_zynq7 C语言驱动DAC以及ADC模块之一&#xff1a;建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二&#xff1a;petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…

Java观察者模式:实现高效的事件驱动编程

Java中的装饰者模式&#xff1a;灵活地为对象添加功能 一、引言 在软件设计中&#xff0c;我们经常需要为对象动态地添加功能或行为。装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许我们在运行时将功能动态地添加到对象上&…

串的相关题目

于是他错误的点名开始了 我发现有关hash得题目有些是可以通过map数组来完成的&#xff1a;何为map数组&#xff0c;我们先思考一下最简单的桶的排序&#xff0c;桶排序是将我们需要数字最为下标输进数组中&#xff0c;而数组是存放的数字是这个数字出现的次数&#xff0c;但是由…

Matlab论文插图绘制模板第137期—极坐标分组气泡图

在之前的文章中&#xff0c;分享了Matlab极坐标气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下极坐标分组气泡图。 先来看一下成品效果&#xff1a; ​ 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋…

解决SSH远程登录开饭板出现密码错误问题

输入“adduser Zhanggong回车”&#xff0c;使用adduser命令创建开发板用户名为Zhanggong 输入密码“123456” 输入密码“123456”

openGauss学习笔记-226 openGauss性能调优-系统调优-配置LLVM-LLVM适用场景与限制

文章目录 openGauss学习笔记-226 openGauss性能调优-系统调优-配置LLVM-LLVM适用场景与限制226.1 适用场景226.2 非适用场景 openGauss学习笔记-226 openGauss性能调优-系统调优-配置LLVM-LLVM适用场景与限制 226.1 适用场景 支持LLVM的表达式 查询语句中存在以下的表达式支持…

PostgreSQL数据库备份和恢复

一、数据库备份 /usr/lib/postgresql/16/bin/pg_dump -h localhost -p 5432 -U odoo -F c -b -v -f backup.sql laonian 二、数据库恢复 1 现在目标pgsql数据库中创建空数据库老年 create database laonian owner odoo; 2 执行恢复命令&#xff08;windows系统下&#xff…