剑指offer_数组---数组中重复的数字

简介: 剑指offer_数组---数组中重复的数字

##题目描述

在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

##解题思路

1,用额外的空间来给数组里的数字打标签,当发现重复标签的时候说明找到了

2,将数组里的数字放到和自己值相同的索引处,如果发现索引冲突,则说明找到了

##代码实现

/**
 * 
 */
package 数组;
/**
 * <p>
 * Title:Duplicate
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月26日 上午10:03:34
 */
public class Duplicate {
  // ===========================================================================使用辅助的boolean数组
  public static boolean duplicate(int numbers[], int length, int[] duplication) {
    if (numbers == null || length < 1) {
      return false;
    }
    for (int i = 0; i < duplication.length; i++) { // 数组元素是否超限判断
      if (numbers[i] < 0 || numbers[i] > length - 1) {
        return false;
      }
    }
    boolean[] flag = new boolean[length];
    for (int i = 0; i < length; i++) {
      flag[numbers[i]] = false; // 初始化所有数组元素都是false
    }
    for (int i = 0; i < length; i++) {
      if (flag[numbers[i]] == true) { // 遇到之前修改过的,就说明遇到重复的了
        duplication[0] = numbers[i];
        return true;
      }
      flag[numbers[i]] = true; // 遇到元素就修改为true
    }
    return false;
  }
  // ===========================================================================不使用额外空间
  public static boolean duplicateSuper(int numbers[], int length,
      int[] duplication) {
    if (numbers == null || length < 1) {
      return false;
    }
    for (int i = 0; i < length; i++) {
      if (numbers[i] < 0 || numbers[i] > length - 1) {
        return false;
      }
    }
    for (int i = 0; i < length; i++) {
      while (numbers[i] != i) {
        if (numbers[i] == numbers[numbers[i]]) {   //如果发现不同的索引处有相同的值,说明重复了
          duplication[0] = numbers[i];
          return true;
        }
        exchange(numbers, i, numbers[i]);      //把数字放到和自己值相同的索引处
      }
    }
    return false;
  }
  public static void exchange(int[] array, int i, int j) {
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }
  public static void main(String[] args) {
    int[] array = { 2, 3, 1, 0, 2, 5, 3 };
    int[] duplication = new int[1];
    System.out.println(duplicate(array, 7, duplication));
  }
}


相关文章
|
JavaScript 搜索推荐 前端开发
WordPress主题推荐
作为网站的基础,WordPress主题对网站加载速度具有重要影响。一个设计不好,代码杂乱的WordPress主题会严重影响网站加载速度,进而影响网站排名。相反,一个设计良好,代码简洁的WP主题会加载很快,有助于提升网页排名。如果你想创建一个精美的WordPress网站,选择一个优秀的主题至关重要。然而,在追求美观的同时,绝不能忽视性能和速度。在本文中,我们已经为你整理了一些速度快且适合SEO的WordPress主题。
437 4
WordPress主题推荐
|
运维 Linux Windows
【计算巢】幻兽帕鲁服务器如何设置定时备份存档
计算巢针对幻兽帕鲁服务器,提供给了定时备份存档的功能,会在设定的频率下,定时将存档文件备份到目标文件夹下,有助于解决存档丢失和坏档的问题。
4355 1
|
C语言
【C语言】atoi函数的使用和模拟实现
本篇将介绍atoi函数的使用,通过实例讲解函数的使用方法,模拟实现atoi函数。
508 1
|
9月前
|
监控 数据可视化 搜索推荐
如何通过数据分析优化营销流程?
在当今竞争激烈的市场中,企业需构建高效的营销流程以整合资源、提升效率并实现业务增长。本文从目标设定、渠道选择、内容创作、数据分析及团队协作工具等方面详细探讨了如何优化营销流程,并指出了常见问题及改进方向。通过明确目标、精准选择渠道、创作高价值内容、用数据驱动决策以及提升团队协作效率,企业能够在激烈的市场竞争中脱颖而出,实现持续增长。
|
机器学习/深度学习 存储 TensorFlow
YOLOv3模型在不同硬件平台上的性能表现有何差异?
YOLOv3模型在不同硬件平台上的性能表现有何差异?
|
关系型数据库 MySQL
MySQL深入浅出: order by if()与order by in()之条件排序
MySQL深入浅出: order by if()与order by in()之条件排序
533 0
|
SQL 测试技术 数据库
Flask与SQLAlchemy的神秘力量:如何让你的数据库飞起来?
【8月更文挑战第31天】在现代Web开发中,Flask和SQLAlchemy是热门技术栈,前者是轻量级Web框架,后者为强大的ORM库。本文介绍如何在Flask项目中集成SQLAlchemy,通过示例展示数据库操作方法,并分享最佳实践,如熟悉ORM、编写测试及适度使用SQL语句,以提升开发效率和代码质量。
543 0
|
JavaScript 前端开发 网络架构
Vue-router的动态路由:获取传递的值
Vue-router的动态路由:获取传递的值
|
芯片 数据库管理
【周末闲谈】关于计算机的二三事
【周末闲谈】关于计算机的二三事
291 0
|
JavaScript 前端开发 API
JS中的 回调函数(callback)
JS中的 回调函数(callback)
724 0