Amazon CodeWhisperer让力扣不再用力code!

news2024/11/26 3:36:38

书接上文《爱编程 why not AI编程》,通过前文的对于Amazon CodeWhisperer的介绍、入门指南、相关课程以及【云上探索实验室】活动,各位读者们应该对于Amazon CodeWhisperer有了一些了解,那么作者今天将该通过本篇文章来介绍用Amazon CodeWhisperer去解力扣(LeetCode)的题目。
总所周知,力扣(LeetCode,下面直接称呼为力扣)是万千程序员的编码训练场,提供了大量不同题型、不同难度的题目,想必同学们在学习的过程中,从简单到难的题目都有做过,并且较多的应该是算法题,有些题做起来让人总是有些“秃然”,那么下面的操作都是算法题,咱们看看Amazon CodeWhipserer的表现如何

由奢入俭难

同理,做题也是,从简单入手,饭要一口口吃,路要一步步走,题要从简到难刷,那么下面的案例,作者分别在力扣上找到简单、中等及困难三个等级的题目,让Amazon CodeWhisperer来解题看看,这位“AI编码助手”到底是什么功力的程序员

易如反掌

两数之和(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]

题解

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i+1,len(nums)):
                if nums[i]+nums[j]==target:
                    return [i,j]

image.png
image.png

优化

有意思的来啦,作者在需求下面加了一句话 “给出时间和空间最优解”,那么程序也随之进行了优化

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dic = {}
        for i, num in enumerate(nums):
            if num in dic:
                return [dic[num], i]
            dic[target - num] = i
        return []

image.png
image.png

结果

image.png
方法二较于方法一,由于减少了循环,虽然内存消耗有所提高,但是执行时间缩减了近百倍,可见用好提示词,也是一个使用CodeWhisperer的好法子。但是,要说的一点,像这样的提示词不一定每次都奏效。

最长公共前缀(14)

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

示例 1:
输入:strs = [“flower”,“flow”,“flight”] 输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”] 输出:“” 解释:输入不存在公共前缀。

提示:

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

题解

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        prefix = strs[0]
        for i in range(1, len(strs)):
            while strs[i].find(prefix) != 0:
                prefix = prefix[0:len(prefix)-1]
                if not prefix:
                    return ""
        return prefix
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs:
            return ""
        for i in range(len(strs[0])):
            for j in range(1,len(strs)):
                if i >= len(strs[j]) or strs[j][i] != strs[0][i]:
                    return strs[0][:i]
        return strs[0]

image.png

结果

image.png

中规中矩

通过上面两道简单的算法题,Amazon CodeWhisperer解答起来可算是易如反掌,那么接下来提升难度,开始解答中等难度的题目,看看Amazon CodeWhisperer表现如何

两数相加(2)

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

示例 1:
image.png输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.
示例 2:
输入:l1 = [0], l2 = [0] 输出:[0]
示例 3:
输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]

提示:

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

题解

class Solution:
    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
        head = ListNode(0)
        cur = head
        carry = 0
        while l1 or l2 or carry:
            if l1:
                carry += l1.val
                l1 = l1.next
            if l2:
                carry += l2.val
                l2 = l2.next
            cur.next = ListNode(carry % 10)
            cur = cur.next
            carry //= 10
        return head.next

image.png

结果

image.png

字符串转换整数(atoi)(8)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:

  1. 读入字符串并丢弃无用的前导空格
  2. 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
  3. 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
  4. 将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
  5. 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
  6. 返回整数作为最终结果。

注意:

  • 本题中的空白字符只包括空格字符 ’ ’ 。
  • 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。

示例 1:
输入:s = “42” 输出:42
解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。

  • 第 1 步:“42”(当前没有读入字符,因为没有前导空格)
  • 第 2 步:“42”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
  • 第 3 步:“42”(读入 “42”)
  • 解析得到整数 42 。 由于 “42” 在范围 [-231, 231 - 1] 内,最终结果为 42 。

示例 2:
输入:s = " -42" 输出:-42
解释:

  • 第 1 步:" -42"(读入前导空格,但忽视掉)
  • 第 2 步:" -42"(读入 ‘-’ 字符,所以结果应该是负数)
  • 第 3 步:" -42"(读入 “42”)
  • 解析得到整数 -42 。 由于 “-42” 在范围 [-231, 231 - 1] 内,最终结果为 -42 。

示例 3:
输入:s = “4193 with words” 输出:4193
解释:

  • 第 1 步:“4193 with words”(当前没有读入字符,因为没有前导空格)
  • 第 2 步:“4193 with words”(当前没有读入字符,因为这里不存在 ‘-’ 或者 ‘+’)
  • 第 3 步:“4193 with words”(读入 “4193”;由于下一个字符不是一个数字,所以读入停止)
  • 解析得到整数 4193 。 由于 “4193” 在范围 [-231, 231 - 1] 内,最终结果为 4193 。

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、’ ‘、’+‘、’-’ 和 ‘.’ 组成

题解

class Solution:
    def myAtoi(self, str: str) -> int:
        str = str.strip()
        if not str:
            return 0
        if str[0] == '-' or str[0] == '+':
            sign = 1 if str[0] == '+' else -1
            str = str[1:]
        else:
            sign = 1
        res = 0
        for i in str:
            if i.isdigit():
                res = res * 10 + int(i)
            else:
                break
        res = res * sign
        if res < -2**31:
            return -2**31
        elif res > 2**31 - 1:
            return 2**31 - 1
        else:
            return res

image.png

结果

image.png

千辛万苦?

经过前面4个题的体验,历经简单到中等难度,到这一阶段直接上强度,力扣将其划分为“困难”级别的题目,这里仅仅准备了两道题作为“困难“级别的演示,具体的可以到视频中看,那么下面大家看看Amazon CodeWhisperer能否轻松应对该试题吧!

寻找两个正序数组的中位数(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
提示:

  • nums1.length == m
  • nums2.length == n
  • 0 <= m <= 1000
  • 0 <= n <= 1000
  • 1 <= m + n <= 2000
  • -106 <= nums1[i], nums2[i] <= 106

题解

class Solution:
    def findMedianSortedArrays(self, nums1: List[int], nums2: List[int]) -> float:
        nums = nums1 + nums2
        nums.sort()
        n = len(nums)
        if n % 2 == 0:
            return (nums[n//2-1] + nums[n//2])/2
        else:
            return nums[n//2]

image.png

结果

image.png

最长有效括号(32)

困难
相关标签
相关企业
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

示例 1:
输入:s = “(()” 输出:2 解释:最长有效括号子串是 “()”
示例 2:
输入:s = “)()())” 输出:4 解释:最长有效括号子串是 “()()”
示例 3:
输入:s = “” 输出:0

题解

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        stack = []
        stack.append(-1)
        res = 0
        for i in range(len(s)):
            if s[i] == '(':
                stack.append(i)
            else:
                stack.pop()
                if len(stack) == 0:
                    stack.append(i)
                else:
                    res = max(res, i - stack[-1])
        return res

image.png

结果

image.png

优缺点

  • 通过本次5道题的一个简单测试,其中有包含2题简单、2题中等以及1题困难,咱们可以基于上面的实验结果可以看到的是–Amazon CodeWhisperer可以轻松应对,其中可以通过增加额外提示词来优化给出的解决方案,例如,"给出最优解"等,让Amazon CodeWhisperer尝试去用不同的解题方法生成代码,以达到基于之前代码的时间和空间的最优解。

  • 虽然Amazon CodeWhisperer的表现不错,但是,也有Amazon CodeWhisperer无法应对的题目,例如,力扣10题其实也是在本篇文章测试范围内,但是按照本篇文章的测试方法让Amazon CodeWhisperer给出解题代码,但没有成功,也许有”中文“的问题的影响

image.png

总结

通过上述6个力扣题目测试,可以看到Amazon CodeWhisperer在处理算法题目方面,从易到难都可以轻松应对,但也不是完全全能型的,例如在某些力扣的困难题目操作中,以python3为例,无法成功的根据题目生成代码,甚至于出现在函数中出现"pass"的情况。
总的来说,Amazon CodeWhisperer在代码理解和生成方面在不错的表现,并且可根据用户的要求,尽可能的对代码进行优化,有时还会根据提示词的不同,给出一些代码建议以及解题思路。对于无法解答的题目,也是很直白的给出"Pass"这样的直白回答,也是一个非常诚实的程序员。的确有一些问题无法解决,但是作为一个推出时间不太长的服务,其本身还有很长的过程需要走,就现目前而言,仅仅提供了个人免费版、专业版,那么后续官方肯定会推出企业版,同时Amazon CodeWhisperer也会不断的更新优化,不断完善其功能,发展为“六边形战士”!

最后,根据亚马逊云科技官方消息,“2023年10月9日,储瑞松将接替张文翊,担任亚马逊全球副总裁、亚马逊云科技大中华区执行董事”,从作者本人的角度而言,结合储总在AI方面的经历,亚马逊云科技推出生成式AI新服务—Amazon Bedrock,以及亚马逊云科技推出的全托管式产品向Anthropic注资至多40亿美元,这一系列的动作,可以看出亚马逊云科技在AI方面发展的强劲势头!让我们期待亚马逊云科技能够推出更多更好的人工智能产品!

亚马逊云科技宣布大中华区新任领导人
亚马逊云科技全托管生成式 AI 服务 Amazon Bedrock 现已正式可用
重磅丨亚马逊宣布与 Anthropic 展开战略合作,共同推进生成式 AI 发展

福利时间到

现目前Amazon CodeWhisperer同样还有【云上实验室】活动,广大程序员同学可以参加到活动中,大家在使用Amazon CodeWhisperer的同时,还可以向活动方提出自己宝贵的反馈、建议等,同时还可以获取丰厚的奖品!
不仅如此,咱们还有Innovate大会,拥抱生成式 AI,花样玩法待解锁。想获得最新AI资讯,亚马逊云科技生成式 AI构建者大会将于10月24日在北京举行,届时大咖云集,将为大家带来最新前沿技术和成功案例,现场还有动手实践以及专为Builders 进阶的开源工具体验,报名入口看这里:http://c.suo.nz/daeuR
image.png
想要用技术实验、产品体验、案例应用等方式,亲身感受最新、最热门的亚马逊云科技开发者工具与服务,来云上探索实验室发现 Amazon CodeWhisperer 的更多可能:http://c.suo.nz/aadBL
想要快速上手 Amazon CodeWhisperer,官方免费课程《Amazon CodeWhisperer 入门》带你30分钟上车,牵手 AI 编程伴侣,开启云职场新工作方式。
三个平台随意挑,轻松开启学习之旅:
Skill Builder:
http://c.suo.nz/7Rfjz
网易云课堂:
http://c.suo.nz/7RfjJ
CSDN:
http://c.suo.nz/crAyg

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

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

相关文章

OpenCV官方教程中文版 —— Canny 边缘检测

OpenCV官方教程中文版 —— Canny 边缘检测 前言一、原理1.噪声去除2.计算图像梯度3.非极大值抑制4.滞后阈值 二、OpenCV 中的 Canny 边界检测练习 前言 OpenCV 中的 Canny 边缘检测 • 了解 Canny 边缘检测的概念 • 学习函数 cv2.Canny() 一、原理 Canny 边缘检测是一种…

FreeRTOS深入教程(任务的引入及栈的作用)

文章目录 前言一、任务的引入二、深入理解C语言函数的调用1.ARM架构2.基础汇编指令3.函数运行流程分析 三.保存现场的几种情况1.函数调用2.中断处理3.任务切换 总结 前言 本篇文章开始带大家深入学习FreeRTOS&#xff0c;带大家学习什么是任务&#xff0c;并且深入学习栈的作用…

Openssl数据安全传输平台008:业务数据分析+工厂方法

文章目录 UML图1.1 客户端1.2 服务器端 UML图 1.1 客户端 // 准备要发送的数据 struct RequestMsg {//1 密钥协商 //2 密钥校验; // 3 密钥注销int cmdType; // 报文类型string clientId; // 客户端编号string serverId; // 服务器端编号string sign;string data; };1.2 服务器…

USB学习(1):USB基础之接口类型、协议标准、引脚分布、架构、时序和数据格式

连接计算机外围设备最简单的方法是通过USB(通用串行总线)。USB是即插即用接口&#xff0c;可以将扫描仪、打印机、数码相机、闪存驱动器等计算机外围设备连接到计算机上。本篇文章就来介绍一下USB的一些基础知识&#xff0c;包括。 文章目录 1 接口类型和标准规范2 引脚分布3 …

前端Vue——安装和遇到的问题记录

文章目录 安装Node.js安装Vue需要的脚手架Vue Cli在PyCharm中开发Vue项目 安装Node.js 下载地址&#xff1a;https://nodejs.cn/download/ 下载.Msi即可&#xff0c;然后安装&#xff0c;一直next WinR&#xff0c;cmd&#xff0c;node -v可以查看node的版本&#xff0c;v18.1…

Deno 命令行界面

目录 1、命令行界面 ​2、脚本源 3、脚本参数 4、监听模式 5、完整性标记&#xff08;lock files&#xff09; 6、缓存和编译标记 7、运行时标记 7.1 类型检查标记 7.2 权限标记 7.2.1 权限 7.2.2 放心地运行不受信任的代码 7.2.3 权限列表 7.2.4 可配置权限 文件…

Vm虚拟机安装Linux(ubuntu18.04)系统教程(2023最新最详细)

软件&#xff1a;Linux版本&#xff1a;18.0.4语言&#xff1a;简体中文大小&#xff1a;1.82G安装环境&#xff1a;VMware硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09; 下载通道①丨百度网盘&#xff1a; 1.Vm虚拟机15.5下载链接&#xff1a; https://pan.baidu.…

Vue项目中使用Multiavatarjs生成自定义随机头像-demo

Multiavatar & vue-color-avatar 前者使用简单一点提供的有api&#xff0c;后者更类似一个项目 主要使用Multiavatar去实现随机生成头像的功能 https://github.com/multiavatar/Multiavatar/blob/main/multiavatar.js 使用很简单&#xff0c;把js下载保存到项目中&#xff…

【Top101】002链表内指定区间反转

链表内指定区间反转_牛客题霸_牛客网 import java.util.*;/** public class ListNode {* int val;* ListNode next null;* public ListNode(int val) {* this.val val;* }* }*/public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿…

零代码编程:用ChatGPT将Mobi、epub、azw3等电子书批量转换为word文档

将ebook格式转换为PDF需要一个名为Calibre的命令行工具。这是一个开源的电子书管理工具&#xff0c;首先在系统上安装它&#xff0c;软件下载地址&#xff1a;https://calibre-ebook.com/download_windows 然后将其添加到PATH环境变量中&#xff1a; 接下来&#xff0c;在ChatG…

学信息系统项目管理师第4版系列35_补遗

题外话&#xff1a;1. 计划没有变化快&#xff0c;10月18日软考出了通告&#xff0c;10月28日和29日分别是信息系统项目管理师第一批次和第二批次考试&#xff0c;比原先11月4日提前一周&#xff0c;祝贺那一批敢为人先的幸运儿。 2. 该系列也进入了尾声&#xff0c;补遗是正文…

【Maven】Unknown lifecycle phase “.skip.test=true“.

idea 终端执行如下命令时 mvn clean install -Dmaven.skip.testtrue报&#xff1a; Unknown lifecycle phase ".skip.testtrue". You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id&…

【ONE·C++ || 智能指针 特殊类的设计】

总言 主要介绍智能指针&#xff08;auto_ptr、unique_ptr、shared_ptr、weak_ptr&#xff09;和特殊类的设计&#xff08;单例模式&#xff09;。 文章目录 总言1、为什么需要智能指针&#xff1f;&#xff08;内存泄漏&#xff09;1.1、什么是内存泄漏1.2、内存泄漏的分类和常…

leetcode做题笔记199. 二叉树的右视图

给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: [] 思路一&…

SD/SDIO(2):SDIO协议介绍和初始化流程

文章目录 1 标准/非标准SDIO规范2 SDIO引脚定义3 SDIO初始化流程3.1 由不支持I/O的主机初始化3.2 由支持I/O的主机初始化3.3 CMD5(IO_SEND_OP_COND)3.4 R4(CMD5的回复) 4 总结 1 标准/非标准SDIO规范 如下图所示&#xff0c;SDIO总线规范由物理层规范和SDIO规范定义。组合卡(包…

基于WebRTC构建的程序因虚拟内存不足导致闪退问题的排查以及解决办法的探究

目录 1、WebRTC简介 2、问题现象描述 3、将Windbg附加到目标进程上分析 3.1、Windbg没有附加到主程序进程上&#xff0c;没有感知到异常或中断 3.2、Windbg感知到了中断&#xff0c;中断在DebugBreak函数调用上 3.3、32位进程用户态虚拟地址和内核态虚拟地址的划分 …

Dockerfile 镜像创建

目录 一、创建镜像的三种方法&#xff1a; 二、基于已有镜像创建&#xff1a; 1.启动一个镜像&#xff1a; ​编辑 2.将修改后的容器提交为新的镜像&#xff1a; 三、基于本地模板创建&#xff1a; 1.下载模板&#xff1a; 2.导入为镜像&#xff1a; 四、基于Dockerfile 创…

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 参考资料&#xff1a; UltraScale Architecture GTH Transceive…

Windows 11中无法通过默认应用更改文件关联

这里写自定义目录标题 现象解决方法 这里以.md格式文件为例。 现象 在 Windows 11 计算机上安装第三方软件后&#xff0c;关联 JPG、JPE、JPEG、PNG、MPG、MPEG、MD 等文件类型和其他文件类型的能力可能会受到阻碍。以下是尝试更改上述文件类型的文件关联时可能遇到的问题。 …

docker部署与基础操作

目录 一、Docker 概述&#xff1a; 1. docker简介&#xff1a; 2. 容器的优点&#xff1a; 3. 容器在内核中支持2种重要技术&#xff1a; 4 . 容器与虚拟机 的区别&#xff1a; 5. docker三个核心概念&#xff1a; 二、安装docker&#xff1a; 1. 关闭防火墙&#xff1a; 2. 安…