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]

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

写出来了吗?加油!py修仙之路固然凶险!

Answer:

        时间复杂度较高版本

#————————————两数之和———————————— 输入数字 存入列表 输入target 遍历列表 条件判断 输出
#时间复杂度较高版本:
# class Solution(object):
#     def twosum(self, nums, target):
#         """
#         :type nums: List[int]
#         :type target: int
#         :rtype: List[int]
#         """
#         flag = False
#         for i in range(len(nums)):
#             for j in range(i + 1, len(nums)):
#                 if nums[i] + nums[j] == target:
#                     return [i, j]
#         return []


# #时间复杂度较低版本:
class Solution(object):
    def twosum(self,nums,target):
        # 遍历nums  target-nums[i] 如果在nums里面存在 添加进output列表 输出他的下标 .index
        for i in range(len(nums)):
            res=target-nums[i]
            if res in nums[i+1:]:
                j=nums[i+1:].index(res) + i + 1
                return [i, j]
        print("未找到匹配")
        return []
#验证
a=Solution()
result = a.twosum(nums=[3,3,1,5,6,7],target=11)
print(result)

2. 字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

解释:

  • 在 strs 中没有字符串可以通过重新排列来形成 "bat"
  • 字符串 "nat" 和 "tan" 是字母异位词,因为它们可以重新排列以形成彼此。
  • 字符串 "ate" ,"eat" 和 "tea" 是字母异位词,因为它们可以重新排列以形成彼此。

示例 2:

输入: strs = [""]

输出: [[""]]

示例 3:

输入: strs = ["a"]

输出: [["a"]]

提示:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] 仅包含小写字

Answer:

# ————————————————————字母异位词————————————————————————————————
class Solution(object):
    """
    :type strs:list[str]
    :type st: str
    """
    def groupAnagrams(self,strs):
        #定义一个空字典,用来储存排序后的结果
        group={}
       # 如果列表长度为1,或者字符串为空,返回原列表
        if len(strs) == 1 or strs=='':
            return [strs]
       #取出字符串
        for s in strs:
            #对每一组字符串进行排序,并用‘’连接在一起,方便后面对比
            sored_s=''.join(sorted(s))
            #如果排序后的字符串不在group中,添加一个新的键
            if sored_s not in group:
                group[sored_s]=[]
            #将排序前的字符串作为排序后的字符串的“值”   比如{'aet':['ate','eat']}
            group[sored_s].append(s)
        result=list(group.values())
        return result


a=Solution()
#四种结果验证
# result=a.groupAnagrams([""])
# result=a.groupAnagrams(["eat"])
# result=a.groupAnagrams(["eat", "nat", "bat"])
result=a.groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"])
print(result)

如果你已经完成今天的两个小练习恭喜你,已经达到练气四阶!🎊👺

       

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐