Leetcode - 两数之和

Leetcode - 两数之和_第1张图片
解题思路:(Cpp)
首先看到不能重复利用元素想到使用两个for循环,因为第一次运行不能保证提升运行的速度,所以时间复杂度稍微有些大。通过调用size函数来控制索引的范围,再进行一次判断,返回所期待的索引值。

class Solution {
     
public:
    vector<int> twoSum(vector<int>& nums, int target) {
     
        int lens=nums.size();
        int i,j;
        for(i=0;i<lens-1;i++)
        {
     
            for(j=i+1;j<lens;j++)
            {
     
                if(nums[i]+nums[j]==target)
                return{
     i,j};
            }
        }
        return{
     };
    }
};

解题思路:(python3)
由寻找元素联系到排序与寻找的循环,但是直接排序的话会打乱原本的索引值导致无法返回其对应的结果,而sorted()函数的第二个参数能够指明排序的方法,故想到使用sorted()在原序列顺序不变的情况下、对原序列的值从小到大标记产生的由索引值构成的一个列表,通过对该列表的遍历循环得到结果。

class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        list_sorted=sorted(range(len(nums)),key=lambda x:nums[x])
        l=0
        r=len(nums)-1
        while l<r:
            if nums[list_sorted[l]]+nums[list_sorted[r]]==target:
                return [list_sorted[l],list_sorted[r]]
            elif nums[list_sorted[l]]+nums[list_sorted[r]]>target:
                r-=1;
            else:
                l+=1

要点:

  • sorted():自定义排序函数

  • sorted(iterable, key=None, reverse=False)

  • 第一个参数是一个iterable,返回值是一个对iterable中元素进行排序后的列表。

  • reverse是一个布尔值。如果设置为True,列表元素将被倒序(降序)排列,默认为False。

  • key接受一个函数,这个函数只接受一个元素,这个函数用于从每个元素中提取一个用于比较的关键字,默认为None。

sorted()函数具体介绍

你可能感兴趣的:(Leetcode练习)