zoukankan      html  css  js  c++  java
  • Leecode-每日一题-题目448. 找到所有数组中消失的数字

    今天重新开始刷leecode 为了致敬我的偶像,还是选择把做题笔记发在博客园上

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

    给定一个范围在  1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。
    找到所有在 [1, n] 范围之间没有出现在数组中的数字。
    您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。
    示例:
    输入:
    [4,3,2,7,8,2,3,1]
    输出:
    [5,6]
    链接:https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array

    解题经历

    首选当然是哈希表,想要再开一个数组,然后再用下标索引进行记录,但是上面的加粗字体为我带上了痛苦面具!!思前想后,还是点开了题解5555

    题解复述

    思路:** 原地修改 ** :这个思路的核心我认为在两点:

    • 1.不产生额外的空间:直接对数组进行修改,数组本身就是一个哈希记录表
    • 2.那怎么在同一个cell里面又做记录又有原来的信息嘞—— 利用取余还原的思想 也就是对应的所以增加n,当再次对n取余的时候就会还原啦
    • 3.需要注意索引的修改(以前都喜欢暴力的绝对11 对应)这波只能是 用 x-1(数组是从0开始的
      贴一波代码啦
    class Solution {
        public List<Integer> findDisappearedNumbers(int[] nums) {
         for(int i=0;i<nums.length;i++){
             int x=(nums[i]-1)%nums.length;  //1.为了控制数组0开始    2.为了防止这个index已经被别的相加过了
             nums[x]+=nums.length;
         }
        List<Integer> rest=new ArrayList<Integer>();
        for(int i=0;i<nums.length;i++){
            if(nums[i]<=nums.length){
                rest.add(i+1);
            }
        }
        return rest;
    }
    }
    

    此外,对于我而言这也是使用ArrayList的一个语法记忆点了
    List rest=new ArrayList()
    暴力贴Java-ArrayList连接

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/wengst/p/14400866.html
Copyright © 2011-2022 走看看