华为算法题 go语言或者ptython

news2024/9/20 12:39:32

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 main

import "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,第二个整数是 i
			return []int{j, i}
		}
		numMap[num] = i
	}
	return nil
}

func main() {
	nums1 := []int{2, 7, 11, 15}
	target1 := 9
	result1 := twoSum(nums1, target1)
	fmt.Println(result1)

	nums2 := []int{3, 2, 4}
	target2 := 6
	result2 := twoSum(nums2, target2)
	fmt.Println(result2)
}

2

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

package main

import "fmt"

// 表示链表节点的数据结构
type ListNode struct {
	Val  int
	Next *ListNode
}

// 接受两个非空链表,表示两个非负整数,返回它们的和的链表
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
	// create 一个虚拟头节点
	dummyHead := &ListNode{}
	// create 一个指针
	current := dummyHead
	// 进位标志
	carry := 0

	// 遍历两个链表,直到两个链表都遍历完并且没有进位为止
	for l1 != nil || l2 != nil || carry > 0 {
		// 计算当前位的数字总和
		sum := carry
		if l1 != nil {
			sum += l1.Val
			l1 = l1.Next
		}
		if l2 != nil {
			sum += l2.Val
			l2 = l2.Next
		}
		// 更新进位  ,注意这里如果小于10carry就是0,否则为1
		carry = 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() {
	// 实例1
	l1 := &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 main

import "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 个元素,每个元素都是 False
        dp = [[False] * n for _ in range(n)]  # 创建一个二维数组,用于存储子串是否为回文串的状态
        start, max_len = 0, 1  # 记录最长回文子串的起始位置和长度,默认为第一个字符和长度为1

        # 初始化长度为1和2的回文子串
        for i in range(n):
            dp[i][i] = True
            if i < n - 1 and s[i] == s[i + 1]:
                dp[i][i + 1] = True
                start = i
                max_len = 2

        # 从长度为3开始遍历,更新状态数组dp
        for 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] = True
                    start = 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.coloradmin.cn/o/1465026.html

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

相关文章

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的景区垃圾识别系统(Python+PySide6界面+训练代码)

摘要&#xff1a;本文介绍了一个先进的基于深度学习的景区垃圾检测系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等前代算法进行了性能对比&#xff0c;通过对比实验证明了其在图像、视频、实时视频流和批量文件处理中对景区垃圾进行精…

【深度学习笔记】3_1 线性回归

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.1 线性回归 线性回归输出是一个连续值&#xff0c;因此适用于回归问题。回归问题在实际中很常见&#xff0c;如预测房屋价格、气温、销售额等连续值的问题。与回归问…

HTTP基本概念-HTTP 常见的状态码有哪些?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 常见的状态码有哪些? 1xx 类状态码属于提示信息&#xff0c;是协议处理中的一种中间状态&#xff0c;实际用到的比较少。 2xx 类状态码表示服务器成功处理了客户端的请求&#xff0c;也是我们最愿…

数据库事物复习

事务 比如说将张三的银行账户拿出一千给李四&#xff0c;首先需要查询张三的账户余额&#xff0c;扣除1000&#xff0c;然后如果给李四加上1000的过程中出现异常会回滚事务&#xff0c;临时修改的数据会回复回去。 -- 1. 查询张三账户余额 select * from account where name …

OpenAI Sora模型,官方技术文档翻译

技术报告地址&#xff1a;https://openai.com/research/video-generation-models-as-world-simulators 本技术报告的重点是&#xff08;1&#xff09;将所有类型的视觉数据转化为统一表示&#xff0c;从而能够大规模训练生成模型的方法&#xff1b;以及&#xff08;2&#xff0…

互联网广告投放与IP地理位置定位

随着互联网的发展和普及&#xff0c;互联网广告投放成为各行业推广营销的重要方式之一。而结合IP地理位置定位技术&#xff0c;可以实现精准定向&#xff0c;提高广告投放的效果和精准度。IP数据云将探讨互联网广告投放与IP地理位置定位的关系&#xff0c;分析其优势和应用场景…

基于springboot+vue的智能物流管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

设计模式-创建型模式-原型模式

原型模式&#xff08;Prototype Pattern&#xff09;&#xff1a;使用原型实例指定创建对象的种类&#xff0c;并且通过克隆这些原型创建新的对象。原型模式是一种对象创建型模式。原型模式其实就是从一个对象再创建另外一个可定制的对象&#xff0c;而且不需知道任何创建的细节…

Nginx知识笔记

一、前言 首先&#xff0c;我们来看一张关于正向代理和反向代理的图片 简单理解正向代理和反向代理的概念&#xff1a; 正向代理&#xff1a;在客户端配置代理服务器(和跳板机功能类似&#xff0c;比如公司很多机器需要通过跳板机才允许登录&#xff0c;正向代理的典型用途是…

npmjs官网(查询依赖包)

npmjs官网 可以方便的查看依赖包的安装、使用说明及相关注意事项等。 以wechat-http为例&#xff1a;

1.CSS单位总结

CSS 单位总结 经典真题 px 和 em 的区别 CSS 中的哪些单位 首先&#xff0c;在 CSS 中&#xff0c;单位分为两大类&#xff0c;绝对长度单位和相对长度单位。 绝对长度单位 我们先来说这个&#xff0c;绝对长度单位最好理解&#xff0c;和我们现实生活中是一样的。在我们…

rabbitmq知识梳理

一.WorkQueues模型 Work queues&#xff0c;任务模型。简单来说就是让多个消费者绑定到一个队列&#xff0c;共同消费队列中的消息。 当消息处理比较耗时的时候&#xff0c;可能生产消息的速度会远远大于消息的消费速度。长此以往&#xff0c;消息就会堆积越来越多&#xff0c…

男性美颜SDK解决方案,专属男性美化新体验

随着科技的发展&#xff0c;美颜技术已广泛应用于摄影、社交、直播等领域&#xff0c;满足了用户对美的追求。然而&#xff0c;传统的美颜算法往往更偏向于女性用户&#xff0c;忽视了男性用户对于自然、真实美的需求。美摄科技针对这一市场痛点&#xff0c;推出了专为男性设计…

APP的UI自动化demo(appium+java)

文章目录 appium连接手机java代码实现-第一版第二版-接入testng和隐式等待显示等待 appium连接手机 准备工作 1、查看连接手机模拟器是否连接成功&#xff0c;获取设备名称 执行命令&#xff1a;adb devices 2、查看android内核版本号—>paltformVersion 执行命令&#xf…

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

某胜物流软件三个接口sql注入漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

云呐矿井智能化运维工是什么?智能机器人运维岗位

煤矿智能运维是指利用先进的信息技术和自动控制&#xff0c;在煤矿生产过程中对煤矿设备进行监测、维护和管理。其职责和工作任务主要包括: 工作环境:  面对复杂的地质条件和极端的气候环境&#xff0c;煤矿智能运维工程师往往需要在地下煤矿、监测中心等环境中工作。因此&a…

2024年【陕西省安全员C证】模拟考试题库及陕西省安全员C证操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证模拟考试题库考前必练&#xff01;安全生产模拟考试一点通每个月更新陕西省安全员C证操作证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过陕西省安全员C证模拟考试题库很简单。 1、【多选题…

TS04——四通道灵敏度自校准电容触摸控制电路,可通过外部电容可独立调节灵敏率和外部电阻调节内部频率,广泛应用于移动设备,门钥匙锁矩阵的应用

TS04是一块四通道灵敏度自校准电容触摸控制电路。 主要特点&#xff1a; ● 灵敏度 自动校准的电容触摸电路 ● 并行接口 ● 通过外部电容可独立调节灵敏率 ● 通过外部电阻调节内部频率 ● 嵌入高频的噪音消除电路 ● 电流工作小 ● 封装形式: SOP14、 16QFN 应用&#xff1a…

关于在分布式环境中RVN和使用场景的介绍4

简介 在前面的文档中&#xff0c;我们介绍了RVN的概念&#xff0c;通过RVN可以解决的某类问题和使用技巧&#xff0c;以及处理RVN的逻辑的具体实现。在本文中&#xff0c;我们将要介绍关于如何使用RVN解决另一种在分布式系统中常出现的问题。 问题 假设我们创建了一个servic…