Leetcode刷题笔记(C++)——数组

Leetcode刷题笔记(C++)——数组

整理一下刷题过程中的思路,在这里进行一下总结与分享。
github地址:https://github.com/lvjian0706/Leetcode-solutions
github项目是刚刚新建的,陆续会将整理的代码以及思路上传上去,代码是基于C++与python的。同时会将基础的排序算法等也一并进行整理上传。

66. 加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
示例 2:
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。

class Solution {
    
    
public:
    /*
    给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
    1. 将该数组反转,编程从低位到高位的顺序;
    2. 进行加1运算,其中,定义flag变量用于记录是否进位,其中运算到最后如果flag等于1,说明答案数组比原始数组多1位,需要push_back(1);
    3. 将结果数组反转;
    */
    vector<int> plusOne(vector<int>& digits) {
    
    
        reverse(digits.begin(), digits.end());
        int flag = 1;
        for(int i=0; i<digits.size(); i++){
    
    
            if((digits[i] + flag) >= 10){
    
    
                digits[i] = (digits[i] + flag) % 10;
            }
            else{
    
    
                digits[i] = digits[i] + flag;
                flag = 0;
            }
        }
        if(flag==1) digits.push_back(1);
        reverse(digits.begin(), digits.end());
        return digits;
    }
};

350. 两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。

示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2,2]
示例 2:
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[4,9]

class Solution {
    
    
public:
    /*
    计算两个数组的交集:
    方法1. 先排序,后使用双指针遍历
    1. 将两个数组排序,从小到大即可;
    2. 定义两个指针用于遍历两个数组;
    3. 当两个元素相等时,存入答案中,nums1[i]<nums2[j]时,i++,找比nums1[i]大的元素继续判断,当nums1[i]>nums2[j]时,j++,找比nums2[j]大的元素继续判断;
    */
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
    
    
        sort(nums1.begin(), nums1.end());
        sort(nums2.begin(), nums2.end());
        vector<int> ans;
        int i=0, j=0;
        while(i<nums1.size() && j<nums2.size()){
    
    
            if(nums1[i]==nums2[j]){
    
    
                ans.push_back(nums1[i]);
                i++;
                j++;
            }
            else if(nums1[i]<nums2[j]) i++;
            else if(nums1[i]>nums2[j]) j++;
        }
        return ans;
    }
};


class Solution {
    
    
public:
    /*
    计算两个数组的交集:
    方法2. 使用哈希表存放nums1中的元素以及出现次数,然后遍历nums2并将重复元素放入答案中,遍历过程中,碰到重复元素需要将哈希表中的出现次数减1;
    */
    vector<int> intersect(vector<int>& nums1, vector<int>& nums2) {
    
    
        map<int, int> nums1_map;
        vector<int> ans;
        for(int i=0; i<nums1.size(); i++){
    
    
            if(nums1_map.find(nums1[i]) == nums1_map.end()){
    
    
                nums1_map[nums1[i]] = 1;
            }
            else nums1_map[nums1[i]]++;
        }
        for(int j=0; j<nums2.size(); j++){
    
    
            if(nums1_map.find(nums2[j]) != nums1_map.end() && nums1_map[nums2[j]] > 0){
    
    
                ans.push_back(nums2[j]);
                nums1_map[nums2[j]]--;
            }
        }
        return ans;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_43273742/article/details/107733421
今日推荐