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 ++;
        }
    }
}

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

相关推荐
ting94520001 天前
Humalike X Hermes 深度技术剖析:单指令注入群聊社交智能的底层架构、算法与跨 IM 平台实现
人工智能·算法·架构
吴声子夜歌1 天前
Java面试——算法
java·算法·面试
evans在进步1 天前
LeetCode 64:最小路径和——Java 原地动态规划详解
java·leetcode·动态规划
h_a_o777oah1 天前
【图论】Tarjan 缩点:解决有向图中环的问题
c++·算法·图论·acm·强连通分量·缩点·tarjan
Tisfy1 天前
LeetCode 1386.安排电影院座位:哈希表+位运算
算法·leetcode·散列表·题解·哈希表
Nil2081 天前
leetcode 199二叉树的右视图
算法·leetcode·深度优先
M78佐菲1 天前
c语言学习笔记:排序与查找方法整理
linux·c语言·笔记·学习·算法
AI备案指南-满满1 天前
人工智能拟人化互动服务安全自评估报告的评估要点有哪些?
人工智能·算法·安全·机器人·大模型备案·算法备案
土司大王1 天前
LeetCode hot100——两两交换链表中的节点
算法·leetcode·职场和发展