zoukankan      html  css  js  c++  java
  • 一个数组a[],有99个元素,为1100中的整数,找出其中缺少的那个数字

    利用冒泡排序,可以找出其中缺少的数字,但这里要告诉大家的是另外三个简单的办法。

    1,构造一个新数组,把原数组值作键,键作值。然后从1开始遍历新数组,如果某个下标的元素没有值,则这个下标就是原数组所没有的值

    2,1到100的和减去原数组的和,差值就是缺少的元素

    3,php异或运算的特性

    $a^1^2^3^....^100^1^2^3^....^100=$a;

    所以只要构造一个1-100的数组,和原数组进行遍历异或运算,就可以找出100数组比99数组多出的那个数字。

    代码如下:

    class A {
    //生成数组
    public function create() {
    for ($i = 0; $i < 100; $i++) {
    $arr[$i] = $i+1;
    }
    echo '排序之前<br>';
    $this->show($arr);
    echo '排序之后<br>';
    $arr = $this->swap($arr);
    $this->show($arr);
    return $arr;
    }
    public function swap($arr) {
    for ($i = 0; $i < 1000; $i++) {
    $m = rand(0, 99);
    $n = rand(0, 99);
    $temp = $arr[$m];
    $arr[$m] = $arr[$n];
    $arr[$n] = $temp;
    }
    echo '我删除了数字'.$arr[99].'<br>';
    unset($arr[99]);
    return $arr;
    }
    public function show($arr) {
    $count = count($arr);
    for ($i = 0; $i < $count; $i++) {
    if (($i+1)%5 == 0) {
    echo $arr[$i]."<br>";
    } else {
    echo $arr[$i].' ';
    }
    }
    echo '<br>';
    }
    public function method1($arr) {
    //键值对换
    for ($i = 0; $i < 99; $i++) {
    $newarr[$arr[$i]] = $i;
    }
    for ($i = 1; $i < 100; $i++) {
    if (!isset($newarr[$i])) {
    echo '缺少元素'.$i.'<br>';
    }
    }

    }
    public function method2(array $arr)
    {
    $sum1 = 0;
    $sum2 = 0;
    for ($i = 1; $i < 101; $i++) {
    $sum1 += $i;
    }
    $len = count($arr);
    for ($i = 0; $i < $len; $i++) {
    $sum2 += $arr[$i];
    $num = $sum1 - $sum2;
    }
    echo '缺少元素' . $num.'<br>';
    }
    public function method3($arr) {
    $len = count($arr);
    $result = '';
    for ($i = 0; $i < $len; $i++) {
    if ($i == 0) {
    $result = $arr[$i];
    } else {
    $result = $result^$arr[$i];
    }
    }
    $result2 = '';
    for ($i = 1; $i < 101; $i++) {
    if ($i == 0) {
    $result2 = $i;
    } else {
    $result2 = $result2^$i;
    }
    }
    $num = $result^$result2;
    echo '缺少元素'.$num.'<br>';
    }
    }
    header("Content-type:text/html;charset=utf-8");
    $a = new A();
    $b = $a->create();
    $a->method1($b);
    $a->method2($b);
    $c = $a->method3($b);
  • 相关阅读:
    【队列】队列的分类和实现
    【JSP】EL表达式语言
    【JSP】JSP的介绍和基本原理
    【JSP】JSP Action动作标签
    【Servlet】关于RequestDispatcher的原理
    【JSP】JSP指令
    【JSP】JSP中的Java脚本
    【算法】表达式求值--逆波兰算法介绍
    C语言指针详解
    移动架构-MVVM框架
  • 原文地址:https://www.cnblogs.com/warmsun/p/6559728.html
Copyright © 2011-2022 走看看