0
点赞
收藏
分享

微信扫一扫

Python实现深度森林(Deep Forest)回归模型(deepforest回归算法)项目实战

码农K 2024-08-11 阅读 29

进阶,其他解法

数组

88. 合并两个有序数组 - 力扣(LeetCode)

1、按非递减顺序合并两个数组

从末尾开始,用while分没到两个数组头,到第一个数组头,到第二个数组头三种情况

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
        int i=m-1,j=n-1,k=m+n-1;
        while(i>=0&&j>=0){
            nums1[k--]=nums1[i]>nums2[j]?nums1[i--]:nums2[j--];
        }
        while(i>=0){
            nums1[k--]=nums1[i--];
        }
        while(j>=0){
            nums1[k--]=nums2[j--];
        }
    }
};

 2、移除掉某个数值的元素,无序

27. 移除元素 - 力扣(LeetCode)

借助一个新标号

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
    //双指针法
    int slowIndex=0;
    for(int i=slowIndex;i<nums.size();i++){
        if (val!=nums[i]){
            nums[slowIndex++]=nums[i];//先赋值,再++
        }
    }
    return slowIndex;
    }
};

3、删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣(LeetCode)

同样用一个标号,在原数组覆盖(序列长度有变化,且后面的元素不重要)同2

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int index=1;
        for(int i=1;i<nums.size();i++){
           if(nums[i]!=nums[i-1]){
            nums[index++]=nums[i];
           }
        }
        return index;
    }
};

4、80. 删除有序数组中的重复项 II - 力扣(LeetCode)

使得出现次数超过两次的元素只出现两次,记录相等的次数

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size()<=2)
        return nums.size();
        int index=1;
        int count=0;
        for(int i=1;i<nums.size();i++){
           if(nums[i]==nums[i-1]){
            count++;          
           if(count<=1){
             nums[index++]=nums[i];
           }
           }
           else{
            count=0;
            nums[index++]=nums[i];
           } 
           
        }
        return index;
    }
};

5、169. 多数元素 - 力扣(LeetCode)

数组中出现次数超过一半的数字” 被称为 “众数” 

此数字出现次数大于所有其他数字出现次数

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int x=0,votes=0;
      for(int num:nums){
        if(votes==0) x=num;
        votes+=x==num?1:-1;
      }
      return x;
    }
};

6、189. 轮转数组 - 力扣(LeetCode) 

(i+k)%n,新建数组

class Solution {
public:

    void rotate(vector<int>& nums, int k) {
        int n=nums.size();
         vector<int> tmp(n);
        for(int i=0;i<n;i++){
            tmp[(i+k)%n]=nums[i];
        }   
        nums.assign(tmp.begin(),tmp.end());
    }
};
举报

相关推荐

0 条评论