zoukankan      html  css  js  c++  java
  • 求整数数组(长度为n),出现大于2/n次数的数字

    条件:时间复杂度是O(n),空间复杂度是O(1)

    方法1:标记法

    int[] arr = { 1, 2, 3, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1 };
    int len = arr.Length;
    int[] c = new int[len];
    int i = 0;
    for (i = 0; i < len; i++)
    {
    c[i] = 0;
    }
    
    for (i = 0; i < len; i++)
    {
    c[arr[i]]++;
    }
    
    for (i = 0; i < len; i++)
    {
    if (c[i] > len / 2)
    {
    Console.WriteLine(i);
    break;
    }
    }
    View Code

    最后是百度出来方法:我觉得有错,但是很多人都是这么写

    int A = 0;
    int B = 1;
    
    foreach (var item in arr)
    {
    if (A == item)
    {
    B++;
    }
    else
    {
    if (B == 1)
    {
    A = item;
    }
    else
    {
    
    B--;
    }
    }
    
    }
    View Code

    举一反三:如果求是任意数组出现次数最多数字

    很简单,在方法1基础上改改

    加多一个for循环,具体代码,各位自行去实现

  • 相关阅读:
    poj1988
    sgu488
    Walking around Berhattan
    基于矩阵分解的简单推荐算法
    Funny Feature
    php面向对象
    PHPstorm快捷键
    创建UIImage的两种方法
    dismissViewControllerAnimated有延迟
    17个常用代码整理
  • 原文地址:https://www.cnblogs.com/walleyekneel/p/3574424.html
Copyright © 2011-2022 走看看