0
点赞
收藏
分享

微信扫一扫

task 01 数组---datawhale and 天池

双井暮色 2022-02-16 阅读 28

task 01 数组—datawhale and 天池

例题分析

1. 两数之和

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

2. 最接近的三数之和

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int n = nums.size();
        int ans = nums[0]+nums[1]+nums[2];
        for (int i = 0 ; i < n - 2 ; ++ i)
            for (int j = i + 1; j < n - 1 ; ++ j)
                for (int k = j + 1; k < n ; ++ k)
                {
                    int temp = nums[i] + nums[j] + nums[k];
                    if (abs(temp - target) < abs (ans - target)) ans = temp;
                }
        return ans;
    }
};
class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        sort(nums.begin(),nums.end());
        int ans = nums[0] + nums[1] + nums[2];
        int n = nums.size();
        for (int i = 0 ; i < n - 2 ; ++ i)
        {
            int start = i + 1,end = n - 1;
            while (start < end)
            {
                int temp = nums[start] + nums[end] + nums[i];
                if (abs(temp - target) < abs(ans - target)) ans = temp;
                if (temp > target) --end;
                else if (temp < target) ++start;
                else return ans;
            }
        }
        return ans;
    }
};

课后习题

1. 移除元素

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int n = nums.size();
        int count = 0;
        for (int i = 0 ; i < n ; ++ i )
        {
            if (nums[i] != val)
            {
                nums[count] = nums[i];
                ++ count;
            }
        }
        return count;
    }
};
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int left = 0 , right = nums.size();
        while (left < right)
        {
            if (nums[left] == val) nums[left] = nums[--right];
            else ++left;
        }    
        return left;
    }   
};

2. 删除有序数组中的重复项

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if ( n == 0 ) return 0;
        int count = 1;
        int temp = nums[0];
        for (int i = 1 ; i < n ; ++ i)
        {
            if (nums[i] != temp)
            {
                nums[count] =nums[i];
                ++ count;
                temp = nums[i];
            }
        }
        return count;
    }
};
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int n = nums.size();
        if ( n == 0 ) return 0;
        int fast = 1, slow = 1;
        while (fast < n)
        {
            if (nums[fast] != nums[fast - 1])
            {
                nums[slow] = nums[fast];
                ++ slow;
            }
            ++ fast;
        }
        return slow;
    }
};

3. 三数之和

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        int n = nums.size();
        sort(nums.begin(),nums.end());
        vector<vector<int>> ans;
        if (n < 3 || nums[0] > 0 || nums[n-1] < 0) return ans;
        for (int i = 0 ; i < n - 2; ++ i)
        {
            if (i > 0 && nums[i] == nums[i - 1]) continue;
            int start = i + 1, end = n - 1;
            while (start < end)
            {
                int temp = nums[start] + nums[end] + nums[i];
                if (temp == 0){
                    ans.push_back({nums[start],nums[end],nums[i]});
                    while (start < end && nums[start] == nums[start + 1]) ++ start;
                    while (start < end && nums[end] == nums[end - 1]) -- end;
                    ++ start;
                    -- end;
                }else if (temp > 0) --end;
                else ++ start;
            }
        }
        return ans;
    }
};

总结

​ 熟悉了数组与简单的双指针问题,希望再接再厉~

举报

相关推荐

Task01:数组

天池leetcode编程task1

Datawhale-SQL学习01

阿里云天池task2学习笔记

阿里云天池机器学习task3

0 条评论