zoukankan      html  css  js  c++  java
  • 442. Find All Duplicates in an Array

    Given an array of integers, 1 ≤ a[i] ≤ n (n = size of array), some elements appear twice and others appear once.

    Find all the elements that appear twice in this array.

    Could you do it without extra space and in (O(n)) runtime?

    Example:

    Input:
    [4,3,2,7,8,2,3,1]
    
    Output:
    [2,3]
    

    题意为在一个整形数组且元素值在 [1 .. n] 范围内,要求找出数组中重复2次的元素.

    思路为:针对元素值 a 来说,a - 1作为索引对应了另一个元素,若为正数,表明 a 第一次出现,此时在 A[a-1] 处做个标记,改成负数,表示元素 a 已经到此一游过,若 A[a-1] 为负数,表明a第二次出现,应该输出到结果集合中.

    例子: 顺序扫描数组,假设扫描到第一个2, 我们查看 indx = 2 - 1 = 1的元素是否为 -3, 若为-3,表面 2 是重复元素, 否则将 A[indx = 1]设置为-3.

    人家思路,自己代码:
    (O(n)) time, (O(1)) extra space.

    vector<int> findDuplicates(vector<int>& A) {
    	const int n = A.size();
    	vector<int> res;
    
    	for (int i = 0; i < n; i++) {
    		int indx = abs(A[i]) - 1;
    		if (A[indx] < 0) res.push_back(abs(A[i]));
    		else A[indx] = 0 - A[indx];
    	}
    
    	return res;
    }
    
  • 相关阅读:
    导入导出模块
    jQuery复习
    vue记录
    angular 初探之父子组件之间传递数据
    webpack
    go语言语法记录
    dom元素的滚动(如何实现点击展开更多功能)
    正则回忆录
    Attributes 和 properties区别和联系?
    显示 隐藏DIV的技巧
  • 原文地址:https://www.cnblogs.com/ZhongliangXiang/p/7403610.html
Copyright © 2011-2022 走看看