首页 > 编程语言 >算法:LeetCode448_找出所有数组中消失的数字_java实现

算法:LeetCode448_找出所有数组中消失的数字_java实现

时间:2024-11-11 18:46:21浏览次数:3  
标签:java nums int List LeetCode448 算法 num result new

package com.leetcode;

import java.util.*;

/**
 * LeetCode448FindDisappearedNumInArr:找出所有数组中消失的数字
 */
public class LeetCode448FindDisappearedNumInArr {

    /**
     * 方法1.hashset,找出没出现的数字
     */
    public static List<Integer> findDisappearedNumbers(int[] nums) {
        List<Integer> result = new ArrayList<>();
        if (nums == null || nums.length == 0) {
            return result;
        }
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }

        int n = nums.length;
        for (int i = 1; i <= n; i++) {
            if (!set.contains(i)) {
                result.add(i);
            }
        }
        return result;
    }

    /**
     *
     * @param nums
     * @return
     */
    public static List<Integer> findDisappearedNumbers2(int[] nums) {
        int n=nums.length;
        //1.对数组中数字进行遍历
        for (int num : nums) {
            //对n取模来还原出本来的值
            int x=(num-1)%n;
            nums[x]+=n;
        }

        List<Integer> result=new ArrayList<>();
        for(int i=0;i<n;i++){
            //2.找出数组中缺失的数值
            if(nums[i]<=n){
                result.add(i+1);
            }
        }
        return result;
    }

    public static void main(String[] args) {
//        int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};
//        System.out.println("findDisappearedNumbers(nums) = " + findDisappearedNumbers(nums));
//        int[] nums = {1,1};
//        System.out.println("findDisappearedNumbers(nums) = " + findDisappearedNumbers(nums));

//        int[] nums = {4, 3, 2, 7, 8, 2, 3, 1};
//        System.out.println("findDisappearedNumbers2(nums) = " + findDisappearedNumbers2(nums));
        int[] nums = {1,1};
        System.out.println("findDisappearedNumbers2(nums) = " + findDisappearedNumbers2(nums));

    }
}

标签:java,nums,int,List,LeetCode448,算法,num,result,new
From: https://blog.csdn.net/crazy123456789/article/details/143688890

相关文章

  • Java List——针对实习面试
    目录JavaListJavaList的三种主要实现是什么?它们各自的特点是什么?JavaList和Array(数组)的区别?JavaList和Set有什么区别?ArrayList和Vector有什么区别?什么是LinkedList?它与ArryList有什么区别?什么是ArrayList扩容机制?JavaListJavaList的三种主要实现是什么?它们各......
  • 算法求解 -- (炼码 3853 题)检查是否有路径经过相同数量的0和1
    文章目录1.问题描述2.解决方案概述3.具体实现4.示例解析5.总结1.问题描述给定一个下标从0开始的m×n的二进制矩阵grid,对于任意一个坐标(row,col)的元素,仅可以向右走(row,col+1)或者向下走(row+1,col)。现在从坐标(0,0)出发至终点(m−1,n−1),判断......
  • GBDT算法
    GBDT1.残差提升树(BDT)梯度提升树(GrandientBoosting)是提升树(BoostingTree)的一种改进算法,所以在讲梯度提升树之前先来说一下残差提升树。残差提升树:通过拟合残差的方式进行提升残差=真实值-预测值残差可以是正的,也可以是负的,不能加绝对值(与绝对误差相区分)先来个通......
  • Java灵魂拷问13个为什么,你都会哪些?
    大家好,我是V哥。今天看了阿里云开发者社区关于Java的灵魂拷问,一线大厂在用Java时,都会考虑哪些问题呢,对于工作多年,又没有大厂经历的小伙伴不妨看看,V哥总结的这13个为什么,你都会哪些?先赞后看,绝不摆烂。V哥推荐:2024最适合入门的JAVA课程1.为什么禁止使用BigDe......
  • AdaBoost算法
    Boosting和AdaBoost1.BoostingBoosting体现了提升思想,每一个训练器重点关注前一个训练器不足的地方进行训练,通过加权投票的方式,得出预测结果。Bagging与Boosting区别一:数据方面Bagging:有放回采样Boosting:全部数据集,重点关注前一个弱学习器不足区别二:投票方......
  • 【算法】【优选算法】二分查找算法(上)
    目录一、二分查找简介1.1朴素二分模板1.2查找区间左端点模版1.3查找区间右端点模版二、leetcode704.⼆分查找2.1二分查找2.2暴力枚举三、Leetcode34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1二分查找3.2暴力枚举四、35.搜索插⼊位置4.1二分查找4.2......
  • java整合sse
    目录sse工作原理 SSE的优缺点优点:缺点:Servlet方式的基本逻辑SSE与WebSocket的对比示例代码总结sse工作原理SSE的工作原理基于HTTP协议,它通过以下几个步骤完成:客户端请求:客户端通过GET请求来开启SSE通道。客户端的请求必须设置适当的请求头,告诉服......
  • 深入理解Java对象结构
    一、Java对象结构实例化一个Java对象之后,该对象在内存中的结构是怎么样的?Java对象(Object实例)结构包括三部分:对象头、对象体和对齐字节,具体下图所示1、Java对象的三部分(1)对象头对象头包括三个字段,第一个字段叫作MarkWord(标记字),用于存储自身运行时的数据,例如GC标志位......
  • Java-关于final关键字不得不知道的几大特点
    final-最终的修饰类:表示类不可被继承修饰方法:表示方法不可被子类覆盖,但是可以重载修饰变量:表示变量一旦被赋值就不可以更改它的值。(1)修饰成员变量如果final修饰的是类变量,只能在静态初始化块中指定初始值或者声明该类变量时指定初始值。如果final修饰的是成员变量,可......
  • 多种算法解决组合优化问题平台
    ......