春节刷题day3:LeetCode[热题 HOT 100:461、136、448、53、70、1]

春节刷题day3:LeetCode

461. 汉明距离

136. 只出现一次的数字

448. 找到所有数组中消失的数字

53. 最大子序和

70. 爬楼梯

1. 两数之和


1、461. 汉明距离

class Solution {
    
    
public:
    int hammingDistance(int x, int y) {
    
    
        int ans = 0;
        for(int i = 0; ; i++){
    
    
            if(i == 32) break;
            int k = (1 << i);
            if(k > max(x, y)) break;
            if( ( (k & x) ^ (k & y) ) == k) ans++;
        }
        return ans;
    }
};

在这里插入图片描述

2、136. 只出现一次的数字

class Solution {
    
    
public:
    int singleNumber(vector<int>& nums) {
    
    
        int ans = 0;
        for(int i = 0; i < nums.size(); i++){
    
    
            ans ^= nums[i];
        }
        return ans;
    }
};

在这里插入图片描述

3、448. 找到所有数组中消失的数字

class Solution {
    
    
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
    
    
        vector<int> ans;
        for(int i = 0; i < nums.size(); i++){
    
    
            nums[abs(nums[i]) - 1] = -abs(nums[(abs(nums[i]) - 1)]); 
        }
        for(int i = 0; i < nums.size(); i++){
    
    
            if(nums[i] > 0) ans.push_back(i + 1);
        }
        return ans;
    }
};

在这里插入图片描述

4、53. 最大子序和

class Solution {
    
    
public:
    int maxSubArray(vector<int>& nums) {
    
    
        int sum = 0, ans = -INT_MAX;
        bool ok = false;
        for(int i = 0; i < nums.size(); i++){
    
    
            sum += nums[i];
            ans = max(ans, sum);
            if(sum < 0) sum = 0;
            if(nums[i] >= 0) ok = true;
        }
        if(!ok){
    
    
            for(int i = 0; i < nums.size(); i++) ans = max(ans, nums[i]);
        }
        return ans;
    }
};

在这里插入图片描述

5、70. 爬楼梯

class Solution {
    
    
public:
    int climbStairs(int n) {
    
    
        int ans;
        if(n == 1) return 1;
        else if(n == 2) return 2;
        else{
    
    
            int a = 1, b = 2;
            for(int i = 3; i <= n; i++){
    
    
                ans = a + b;
                a = b; b = ans;
            }
            return ans;
        }
    }
};

在这里插入图片描述

6、1. 两数之和

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

在这里插入图片描述

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

在这里插入图片描述


2021/2/8完结(动力不足,坚持下来好难,明天看看计网的知识吧)。

猜你喜欢

转载自blog.csdn.net/shangzhengyu/article/details/113763114