238. Product of Array Except Self

本文介绍了一种高效算法,用于计算一个整数数组中每个元素对应的除了自身以外所有元素的乘积,且不使用除法操作。该算法通过分别从前向后和从后向前计算累积乘积来实现,并在 O(n) 时间复杂度内完成,同时保持常数级别的空间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an array nums of n integers where n > 1,  return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].

Example:

Input:  [1,2,3,4]
Output: [24,12,8,6]

Note: Please solve it without division and in O(n).

Follow up:
Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        int left = 1;
        int right = 1;
        vector<int> result(n, 1);
        for(int i=0; i<n; i++)
        {
            result[i]*=left;
            result[n-1-i]*=right;
            left*=nums[i];
            right*=nums[n-1-i];
        }
        return result;
    
    }
};


内容概要:文章详细介绍了ETL工程师这一职业,解释了ETL(Extract-Transform-Load)的概念及其在数据处理中的重要性。ETL工程师负责将分散、不统一的数据整合为有价值的信息,支持企业的决策分析。日常工作包括数据整合、存储管理、挖掘设计支持和多维分析展现。文中强调了ETL工程师所需的核心技能,如数据库知识、ETL工具使用、编程能力、业务理解能力和问题解决能力。此外,还盘点了常见的ETL工具,包括开源工具如Kettle、XXL-JOB、Oozie、Azkaban和海豚调度,以及企业级工具如TASKCTL和Moia Comtrol。最后,文章探讨了ETL工程师的职业发展路径,从初级到高级的技术晋升,以及向大数据工程师或数据产品经理的横向发展,并提供了学习资源和求职技巧。 适合人群:对数据处理感兴趣,尤其是希望从事数据工程领域的人士,如数据分析师、数据科学家、软件工程师等。 使用场景及目标:①了解ETL工程师的职责和技能要求;②选择适合自己的ETL工具;③规划ETL工程师的职业发展路径;④获取相关的学习资源和求职建议。 其他说明:随着大数据技术的发展和企业数字化转型的加速,ETL工程师的需求不断增加,尤其是在金融、零售、制造、人工智能、物联网和区块链等领域。数据隐私保护法规的完善也使得ETL工程师在数据安全和合规处理方面的作用更加重要。
#!/usr/bin/env python # coding=utf-8 import rospy import cv2 import numpy as np from sensor_msgs.msg import Image from cv_bridge import CvBridge, CvBridgeError from qrcode from std_msgs.msg import String class QRCodeDetector: def __init__(self): # 初始化ROS节点 rospy.init_node('QD_cheak', anonymous=True) # 创建CV桥接器 self.bridge = CvBridge() # 创建发布者 - 用于发布识别结果 self.result_pub = rospy.Publisher('/qrcode_result', String, queue_size=10) # 创建发布者 - 用于发布带标记的图像 self.image_pub = rospy.Publisher('/qrcode_image', Image, queue_size=10) # 订阅相机图像话题 self.image_sub = rospy.Subscriber('/usb_cam/image_raw', Image, self.image_callback) # 参数配置 self.display = rospy.get_param('~display', True) # 是否显示图像 self.min_size = rospy.get_param('~min_size', 100) # 最小二维码尺寸 rospy.loginfo("二维码识别节点已启动,等待图像输入...") def image_callback(self, data): try: # 将ROS图像消息转换为OpenCV图像 cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8") except CvBridgeError as e: rospy.logerr(f"图像转换错误: {e}") return # 检测二维码 decoded_objects = decode(cv_image) results = [] for obj in decoded_objects: # 提取二维码数据 data = obj.data.decode('utf-8') results.append(data) # 在图像上绘制二维码位置 points = obj.polygon if len(points) > 4: hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32)) hull = list(map(tuple, np.squeeze(hull))) else: hull = points # 绘制边界框 n = len(hull) for j in range(n): cv2.line(cv_image, hull[j], hull[(j+1) % n], (0, 255, 0), 3) # 绘制二维码内容 cv2.putText(cv_image, data, (int(hull[0][0]), int(hull[0][1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) # 发布识别结果 if results: result_msg = ", ".join(results) rospy.loginfo(f"识别到二维码: {result_msg}") self.result_pub.publish(result_msg) # 发布带标记的图像 try: self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8")) except CvBridgeError as e: rospy.logerr(f"图像发布错误: {e}") # 显示图像(可选) if self.display: cv2.imshow("QR Code Detection", cv_image) cv2.waitKey(1) if __name__ == '__main__': try: detector = QRCodeDetector() rospy.spin() except rospy.ROSInterruptException: pass finally: cv2.destroyAllWindows() 使用qrcode来识别二维码
07-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值