2024/9/22 leetcode 128题 283题

目录

128.最长连续序列

题目描述

题目链接

解题思路与代码

题目2

题目描述

题目链接

解题思路与代码

=====================================

128.最长连续序列

题目描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n)的算法解决此问题。

示例 1:

复制代码
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

复制代码
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

题目链接

128.最长连续序列

解题思路与代码

本题目就是先使用一个set数组遍历原数组,去重,然后正式开始我们的逻辑。

就拿样例2来举例

longestidx就是最终结果,每次遍历nums,然后如果该数的前一位不存在,说明可以从这个数开始统计连续区间,currentnum就是统计每一段区间长度,与最终结果取最大值,从而使得结果最大。

(c++代码)

cpp 复制代码
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {

        unordered_set<int> num_set;
        for(auto num : nums) {
            num_set.insert(num);
        }
        int longestidx = 0;
        for(auto num : nums) {
            if(!num_set.count(num - 1)) {
                int currentnum = num;
                int currentidx = 1;

                while(num_set.count(currentnum + 1)) {
                    currentnum ++;
                    currentidx ++;
                }
                longestidx = max(longestidx, currentidx);
            }
        }
        return longestidx;
    }

};

(java代码)

java 复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> num_set = new HashSet<Integer>();
        for(int num : nums) {
            num_set.add(num);
        }
        int longestStreak = 0;

        for(int num : nums) {
            if(!num_set.contains(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

                while(num_set.contains(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }

                longestStreak = Math.max(longestStreak, currentStreak);
            }
        }
        return longestStreak;
    }
}

题目2

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

复制代码
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

复制代码
输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

**进阶:**你能尽量减少完成的操作次数吗?

题目链接

283.移动零

解题思路与代码

本题题目就是双指针,我们直接看图,就用第一个样例模拟。

第一次循环

第二次循环

第三次循环

第四次循环

第五次循环

此时我们已经将非零数字都弄到前面了,剩下部分全部填0,用slow扫尾。

(c++代码)

cpp 复制代码
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        if(nums.size()<2) return;
        int slow = 0,fast = 0;
        for(;fast<nums.size();fast++){
            if(nums[fast]!=0){
                nums[slow] = nums[fast];
                slow ++;
            }
        }
        for(;slow<nums.size();slow++){
            nums[slow]=0;
        }
    }
};

(java代码)

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        int fast = 0, slow = 0;
        for(; fast < nums.length; fast ++ ) {
            if(nums[fast] != 0) {
                nums[slow] = nums[fast];
                slow ++;
            }
        } 
        while(slow < nums.length) {
            nums[slow ] = 0;
            slow ++;
        }
    }
}

=========================================================================

相关推荐
User_芊芊君子26 分钟前
【C语言经典算法实战】:从“移动距离”问题看矩阵坐标计算
c语言·算法·矩阵
wolf犭良1 小时前
37、aiomysql实操习题
开发语言·python·算法
xin007hoyo2 小时前
算法笔记.spfa算法(bellman-ford算法的改进)
数据结构·笔记·算法
向哆哆2 小时前
Java 加密与解密:从算法到应用的全面解析
java·开发语言·算法
uhakadotcom2 小时前
刚发布的PyTorch 2.7提供了什么 新特性
算法·面试·github
新生农民3 小时前
30分钟解决8道算法题
java·数据结构·算法
bbc1212263 小时前
2025/4/23 心得
数据结构·算法
WaitWaitWait017 小时前
LeetCode每日一题4.20
算法·leetcode
蒟蒻小袁7 小时前
力扣面试150题--有效的括号和简化路径
算法·leetcode·面试
跳跳糖炒酸奶8 小时前
第十五讲、Isaaclab中在机器人上添加传感器
人工智能·python·算法·ubuntu·机器人