面试题3:数组中重复的数字

news/2024/7/4 9:27:12

NowCoder

第一种方式:改变数组结构

<?php
header("content-type:text/html;charset=utf-8");
/*
 *数组中重复的数字 P39
 */
function duplicate($numbers,&$duplication){
    //这里要特别注意~找到任意重复的一个值并赋值到duplication[0]
    //函数返回True/False
    if($numbers  == null){
        return false;
    }
    for($i = 0;$i<count($numbers);$i++){
        while ($numbers[$i] != $i){

            if($numbers[$i] == $numbers[$numbers[$i]]){
                $duplication[0] = $numbers[$i];

                return true;
            }
            swap($numbers,$i,$numbers[$i]);//把交换放在审核是否相等后面
        }

    }
    return false;
}

function swap(&$arr,$i,$j){
    $temp = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $temp;
}

$arr = array(2,2,3,0,4);
duplicate($arr,$a);
print_r($a);

 

第二种方式:不改变数组结构

<?php
header("content-type:text/html;charset=utf-8");
/*
 *数组中重复的数字(不打乱数组顺序) P41
 */
function getDuplicate($numbers){
    if($numbers == null){
        return false;
    }
    $start = 1;
    $end = count($numbers)-1;
    while ($end >= $start){
        $mid = (($start + $end) >> 2) + $start;
        $count = getCount($numbers,$start,$mid);
        if($start == $end){
            if($count >1){
                return $start;
            }
            else{
                break;   //没有重复的值,退出循环
            }
        }
        if($count > $mid - $start +1){
            $end = $mid ;
        }
        else{
            $start = $mid +1;
        }
    }
    return false;
}

function getCount($numbers,$start,$end){
    if($numbers == null){
        return false;
    }
    $count = 0;
    for($i=0;$i<count($numbers)-1;$i++){
        if($numbers[$i] >= $start && $numbers[$i] <= $end){
            $count ++;
        }
    }
    return $count;
}

$arr = array(1,3,5,4,3,2,6,7);
echo getDuplicate($arr);

 

转载于:https://www.cnblogs.com/xlzfdddd/p/10054347.html


http://www.niftyadmin.cn/n/530369.html

相关文章

辗除法求最大公约数_最大公约数怎么求?用这三种方法求解非常管用

最大公约数怎么求&#xff1f;同学们可以采用这三种方法进行求解&#xff0c;分别是常规法求最大公约数、短除法求最大公约数和辗转相除法求最大公约数。常规法求最大公约数1、求出每个数的约数同学们要先求出每个数的约数&#xff0c;也就是说要找出能整除这个数的所有整数&am…

[源码和文档分享]基于java实现的数据库管理系统

一、需求分析说明 通过对数据库系统原理的学习&#xff0c;掌握数据库管理系统的运行原理&#xff0c;尝试在给定的DBF文件操作框架的物理储存基础上通过java建立一个数据库管理系统&#xff0c;以更好的温习学习的知识。 基本功能如下&#xff1a; 实现创建表&#xff0c;并把…

storm 阿姆歌曲_Eminem经典歌词

【1】&#xff1a;I feel like Im caged in these chains and restraints. 感觉自己身处牢笼&#xff0c;身负枷锁。 --Eminem 《Evil Twin》【2】&#xff1a;Its a broke day but everything is okay 破碎的一天但一切都好 Im up all night, but everything is alright 彻夜…

Jupyter Notebook 的快捷键

Jupyter Notebook 的快捷键 Jupyter Notebook 有两种键盘输入模式。编辑模式&#xff0c;允许你往单元中键入代码或文本&#xff1b;这时的单元框线是绿色的。命令模式&#xff0c;键盘输入运行程序命令&#xff1b;这时的单元框线是灰色。 命令模式 (按键 Esc 开启) Enter : 转…

mysql中怎么用加法_MySQL 中=用法(长知识)

算术运算符MySQL 支持的算术运算符包括:运算符作用加法-减法*乘法/ 或 DIV除法% 或 MOD取余在除法运算和模运算中&#xff0c;如果除数为0&#xff0c;将是非法除数&#xff0c;返回结果为NULL。1、加mysql>select12;-----|12|-----|3|-----2、减mysql>select1-2;-----|1…

其他事件函数

对许多应用程序&#xff0c;现存包含和RED5不是相关的应用程序逻辑的类需要重用。为了使他们在客户端通过RTMP协议连接的时候可用&#xff0c;这些类需要作为RED5事件函数被注册。 现在有两种方法注册这些事件&#xff1a; 1. 把他们加到配备文件中&#xff1b; 2. …

mysql分组选择数据_我们可以按一列分组并选择MySQL中的所有数据吗?

是的&#xff0c;您可以为此使用group_concat()。让我们首先创建一个表-mysql> create table groupByOneSelectAll-> (-> StudentDetails varchar(100),-> StudentName varchar(100)-> );以下是使用insert命令在表中插入一些记录的查询-mysql> insert into g…

如何创建Red5应用程序

一.序言: 本文档的目的是描述如何在Red5中创建应用程序.需要使用Red5中所给的API. 二.应用程序目录: 在默认的情况下,Red5将所有的应用程序存放在根目录的"Webapps"目录下面.因此在创建一个新的应用程序之前,首先需要在这个目录中创建一个子目录.习惯上这个子目录的…