• 一个数组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);
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 拦截导弹
    Java实现 蓝桥杯VIP 算法训练 拦截导弹
    Java实现 蓝桥杯VIP 算法训练 回文数
    Java实现 蓝桥杯VIP 算法训练 回文数
    Java实现 蓝桥杯VIP 算法训练 集合运算
    好看的游戏soul calibur
    程序员的出路(要非常专一门技术才行,超过80%的同行,或者积累自己的类库和产品)
    Qt的版本历史
    红魔城传说:血色交响曲 (2009)(东方系列游戏,实在是太美了)
    QString和char字符数组之间的转换(QTextCodec.toUnicode方法,特别注意的问题)
  • 原文地址:https://www.cnblogs.com/warmsun/p/6559728.html
Copyright © 2020-2023  润新知