精华内容
下载资源
问答
  •  数组有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。   1、...

                             剑指offer39——数组中出现次数超过一半的数字(Python)

     

    题目描述——网址,参考:大神解答

           数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

     

    1、解法一——时间复杂度为O(N^2)

            思路1:简单粗暴,双重循环遍历,找出现次数最多的那个数,再比较出现次数是否超过数组的一半。不详写,谁都能想到。

           思路2:时间复杂度为O(N^2)的排序算法 (如冒泡、插入、选择等)+ 求排序后数组的中间数 + 判断中间数出现次数是否超过数组的一半这部分放在解法二中统一总结。

     

    2、解法二——时间复杂度为O(NlogN),

          思路:数组排序后,如果符合条件的数存在,则一定是数组中间那个数(比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等),这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优。

    def MoreThanHalfNum_Solution(numbers):
        len1 = len(numbers)
        if len1==0:
            return 0
        numbers.sort() # 排序
        middle = numbers[len1 // 2] #取排序后的中位数
    
        # 判断res是否符合条件,即出现次数大于数组长度的一半
        counts = 0
        for j in range(len1):
            if numbers[j] == middle:
                counts += 1
        if counts>len1//2: # python3整除为//,python2为/
            return middle
        else:
            return 0
    
    
    if __name__ == '__main__':
        try:
            while True:
                arr = [int(i) for i in input().split()]
                print(MoreThanHalfNum_Solution(arr))
        except:
            pass

    结果如下:

            这里可能存在疑问,因为大家都知道非比较排序算法的时间复杂度为O(N),这样最终的时间复杂度也是O(N)!如果面试的过程中,面试官要求给定的无序数组,不能进行排序又该如何处理?

     

    3、解法三——时间复杂度为O(N)——面试官想要的答案

    (1)基于Partition函数的算法,见链接

    (2)根据数组特点求解(重点)——剑指offer代码链接

             如果有符合条件的数字,则它出现的次数比其他所有数字出现的次数和还要多。

            思路:在遍历数组时保存两个值:一是数组中一个数字,一是次数。遍历下一个数字时,若它与之前保存的数字相同,则次数加1,否则次数减1;若次数为0,则保存下一个数字,并将次数置为1。遍历结束后,所保存的数字即为所求。然后再判断它是否符合条件即可。

            参考代码为:

    def MoreThanHalfNum_Solution(numbers):
        len1 = len(numbers)
        if len1==0:
            return 0
        elif len1>=1:
            # 遍历每个元素,并记录次数;若与前一个元素相同,则次数加1,否则次数减1
            res = numbers[0] # 初始值
            count = 1 # 次数
            for i in range(1,len1):
                if count == 0:
                    # 更新result的值为当前元素,并置次数为1
                    res = numbers[i]
                    count = 1
                elif numbers[i] == res:
                    count += 1 # 相同则加1
                elif numbers[i] != res:
                    count -= 1 # # 不同则加1
    
            # 判断res是否符合条件,即出现次数大于数组长度的一半
            counts = 0
            for j in range(len1):
                if numbers[j] == res:
                    counts += 1
            if counts>len1//2: # python3整除为//,python2为/
                return res
            else:
                return 0
    
    
    if __name__ == '__main__':
        try:
            while True:
                arr = [int(i) for i in input().split()]
                print(MoreThanHalfNum_Solution(arr))
        except:
            pass

    运行结果:

    (3)Python中的cellection包的使用——参考Python collection的使用&代码链接

    例子1、若想统计相关元素出现的次数,可以使用Counter:

    >from collections import Counter
    >cnt=Counter()
    >for w in ['a','b','a','a','a','r','b']:
        cnt[w]+=1
    Counter({'a': 4, 'b': 2, 'r': 1})
    # 统计字符串出现的次数 前面有统计sen='hello world',用defaultdict(int)
    >cnt = Counter()
    > for ch in 'hello':
        cnt[ch] = cnt[ch] + 1
    Counter({'l': 2, 'o': 1, 'h': 1, 'e': 1})

    例子2、:elements()方法按照元素的出现次数返回一个iterator(迭代器),元素以任意的顺序返回,如果元素的计数小于1,将忽略它。

    >c = Counter(a=4, b=3, c=1, d=-4,e=0)
    Counter({'a': 4, 'b': 3, 'c': 1, 'd': -4, 'e':0})
    >sorted(c.elements())
    ['a', 'a', 'a', 'a', 'b', 'b','b','c']
    # most_common(n)返回一个list, list中包含Counter对象中出现最多前n个元素。
    >c = Counter('abracadabra')
    Counter({'a': 5, 'b': 2, 'r': 2, 'd': 1, 'c': 1})
    >c.most_common(3)
    [('a', 5), ('b', 2), ('r', 2)]

    因此如果直接利用这个cellection包,上面的代码可写为: 

    import collections
    class Solution:
        def MoreThanHalfNum_Solution(self, numbers):
            # write code here
            tmp = collections.Counter(numbers)
            x = len(numbers)/2
            for k, v in tmp.items():
                if v > x:
                    return k
            return 0

     

    (4)用字典的键值对实现,参考:链接

    用字典的键值对实现,键存放数组中的数字,值存放数字出现的次数。参考代码如下:

    # -*- coding:utf-8 -*-
    class Solution:
        def MoreThanHalfNum_Solution(self, numbers):
            # write code here
            dict = {}
            for num in numbers:
                if num not in dict:
                    dict[num] = 1
                else:
                    dict[num]+=1
                if dict[num] > len(numbers)/2:
                    return num
            return 0
    

     

    展开全文
  • 在日常工作,我们可能会遇到数值中出现 E + 的情况,像这样: 网上的方法有的行不通,像是 1、点击数字选项,在列表找到自定义,然后选择右面的0,最后点击确定 点击确定后就变成下面这个样子 这样的话就把...

    在日常工作中,我们可能会遇到数值中出现 E + 的情况,像这样:
    在这里插入图片描述
    网上的方法有的行不通,像是
    1、点击数字选项,在列表中找到自定义,然后选择右面的0,最后点击确定
    在这里插入图片描述
    点击确定后就变成下面这个样子
    在这里插入图片描述
    这样的话就把数值都变了,其实隐藏掉的内容是不一样的,这个方法是行不通的。

    2、第2种方法是我们在输入数字以前先把这些表格设置成文本格式,这种方法改变不了原来数值的形态。
    在这里插入图片描述

    以上两种方法可能对数值小的有用,但遇到数值隐藏的比较多的就不适用了。

    有最直接最方便的方法不管数值多大都可以一次性改成你想要的形态

    打开Excel文件,点击打开
    在这里插入图片描述
    打开你想要操作的表后会出现文本导入向导
    在这里插入图片描述
    点击下一步,看你文件中分隔符是什么再进行选择,我的文件中使用的是逗号,所以我选择用逗号进行分割
    在这里插入图片描述
    将你需要变化的数值选为文本格式后,点击完成即可。
    在这里插入图片描述
    在这里插入图片描述
    这样操作后数值就会改变了,没有E+的形式。

    展开全文
  • excel数字变成了小数点+E+17怎么办

    千次阅读 2021-03-10 16:09:22
    1.点击单元格,右键选择设置单元格格式 2.点击数字,选择文本,点击确定

    1.点击单元格,右键选择设置单元格格式
    2.点击数字,选择文本,点击确定

    展开全文
  • input数字输入框可以输入e的原因

    千次阅读 2019-05-05 09:13:36
    今天在查看表单实例的时候,发现了一个只能输入数字的input,却可以输入e字母 <Input type="number" v-model.number="form.number" placeholder="请输入"/> 原因是e在数学上代表无理数,e是自然对数的底数,...

    今天在查看表单实例的时候,发现了一个只能输入数字的input,却可以输入e字母

    <Input type="number" v-model.number="form.number" placeholder="请输入"/>
    
    

    原因是e在数学上代表无理数,e是自然对数的底数,是一个无限不循环小数,其值是2.71828…,所以在输入e时,输入框认为是数字。
    为了避免这个bug,我们可以是用下面的方法

    onKeypress="return (/[\d\.]/.test(String.fromCharCode(event.keyCode)))
    
    

    将上面的input改为下面这样:

    <Input type="number" v-model.number="number" placeholder="请输入"
           onKeypress="return (/[\d\.]/.test(String.fromCharCode(event.keyCode)))"/>
    
    

    fromCharCode(numX,numX,…,numX) 可接受一个或多个指定的 Unicode 值,然后返回一个字符串,

    String.fromCharCode(72,69,76,76,79) -->  HELLO
    
    
    展开全文
  • Android 数字显示带E(科学计数法)

    万次阅读 2017-09-12 16:10:48
    我们经常要将数字进行格式化,比如取2位小数,这是最常见的。Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子: public class ImmUtils { public static void dfFormat(Object ...
  • 实现一个输入框只能输入数字,不能输入汉字,字母,其他各种符号,或者是e(inputtype设置number也是可以输入e的)的js实现。ime-mode顺带理解下。
  • Excel表格输入变成E+,怎么办

    千次阅读 2021-06-09 09:33:00
    选中单元格,Ctrl+1,进入单元格格式,选择自定义,通用格式改0或问号
  • Google早几年在美国很多地铁的出站口都有大幅招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.com,也就是自然数e中出现的连续的第一个10个数字组成的质数。据说当时只要正确
  • 数字过长就变成e怎么解决

    千次阅读 2018-05-10 18:13:27
    &lt;fmt:formatNumber value='${model.netValue}' pattern='#,#00.00#'&gt;&lt;/fmt:formatNumber&gt;
  • 正则匹配中文数字

    万次阅读 2018-03-30 15:51:38
    正则匹配中文数字 运营导入小说时遇到小麻烦,想要在章节目录前面加...表达式:(第[\u4e00-\u9fa5\u767e\u5343\u96f6]{1,10}章) 追加的内容\1 笔记 正则匹配中文个位数,\u4e00-\u9fa5 百千零u767e\u534...
  • Matlab 统计数组数字(元素)出现的次数

    万次阅读 多人点赞 2018-08-06 21:38:04
    如何统计一个数组数字(元素)出现的频数、频率和累积频率?这里以案例形式做一个总结。第一种方法:调用MATLAB自带的函数tabulate统计一个数组数字(元素)出现的频数、频率【例1】统计数值型数组各元素...
  • 我们大家在使用Excel文档来整理记录一些数据的时候,在excel单元格输入长段数字就变为公式了,往往得不到一个我们输入的数字内容,这是什么原因呢?首先可能是单元格宽度设置比价短,无法呈现全部数字内容。下面...
  • Excel复制超过15位数字出现“2.01403E+15”的解决方法! 再复制前,先选择单元格(也可多选几个单元格),点击右键,设置格式“文本”类型,再进行复制,就行了。
  • 快速将Excel显示科学记数法的数字转换成文本形式的数字: 选择Excel有问题的这一列:如 然后下选择“固定宽度”-----“下一步”-----“下一步”,然后选择“文本” 然后数据就以文本的形式存储数据...
  • E-Prime教程 | mark标记

    千次阅读 2020-06-16 22:49:46
    E-Prime教程 | mark标记1 Mark 的种类1.1 Mark的定义1.2 Mark的种类2 Mark 的方法3 注意事项4 唠唠叨叨 ...为什么采集的数据放到eeglab当中不能够分段? 后来才知道,原来他没有在实验前ma
  • 苹果电脑键盘不出数字解决办法

    千次阅读 2020-12-19 10:54:12
    苹果电脑键盘不出数字解决办法1、首先可能用户粗心操作造成的。硬件问题包括因为苹果电脑键盘数字键和字母键是整合在一起的,一般按fn Numlk键可以智能切换到小数字键盘。2、如果还是没用的话,那么可能是按键失灵...
  • EXCEL表格 显示 超长 数字 E+ 变成 文本格式,数字全部显示 选中整列,数据--》分列--》固定列宽度(第二项)--》--》下一步--》下一步--》文本--》完成 搞定 对于身份证号或者电话号码或者准考证号等纯数字...
  • str = input("please str:") index = 0 #下标 sum = 0 #总数 while index < len(str) : if str[index] >= "0" and str[index] <= "9": sum += int(str[index]) index += 1 ...print("sum = %d" ...
  • 输入一个字符串,统计其中数字字符出现的次数(题目来源:C语言程序设计 第三版) #include<stdio.h> int main() { char a[1000]; int i,n,m=0; printf("请输入正整数n的值:\n"); scanf("%d",&n); ...
  • 使用VLOOKUP函数时,明明可以看到“完全相同”的列值,但是在VLOOKUP结果却是N/A。 从巨硬社区找到了相应的答案: 原文链接:...
  • 解决办法:在读取数据进行判断时,若为数字类型:  if(cell.getCellType() == Cell.CELL_TYPE_NUMERIC){ //数字 if(String.valueOf(cell.getNumericCellValue()).indexOf("E")==-1){ return String.valueOf...
  • 从excel中将身份证号或银行卡号复制到新的excel中出现E+这种标识的科学记数法样式,无法显示原数据 从word中将身份证号或银行卡号复制到新的excel中出现E+这种标识的科学记数法样式,无法显示原数据 样例: ...
  • public class TestSubstring { public static void main(String[] args) { getCount("adsJKJ3K21AfaAD134F13241d134134s141faAAFDF... //统计字符串,大写字母,小写字母,数字出现的次数 public static void g...
  • Excel长串数字显示异常,如2E+13

    千次阅读 2018-12-19 12:41:18
    1、选定显示异常列,右击——设置单元格格式 2、在 数字 页的 分类 选择“自定义”,类型选择“0” 3、点击确定,数据即可正常显示。
  • excel输入数字变成E+ 的问题

    千次阅读 2019-04-08 17:31:48
    在excel,单元格默认格式是 常规 ,输入数字变成E+ ,比如:输入9787115304780, 显示 9.78712E+12 解决办法如下: 1.将数字作为文本输入 即使用“单元格”命令将包含数字的单元格设置“文本”格式,...
  • 罗马数字与阿拉伯数字的相互转换

    万次阅读 2018-05-02 09:27:22
      最近遇到一道非常有趣的题目,题目大意如下:有一个富翁在银河系里做生意,而银河系使用的是罗马数字,所以他需要一个精明能干的助手,帮助他完成罗马数字与阿拉伯数字的相互转换,题目在这个背景下衍生出交易...
  • 可是为什么 double aa = -19162431.1254; 没有匹配为true呢?  原来当数字位数很长时,系统会自动转为科学计数法。所以 aa=-1.91624311254E7 .  所以我们需要使用 java 专门用于商业精度计数的类  BigDecimal...
  • 它们在电文中出现的频度分别{0.31,0.16,0.10,0.08,0.11,0.20,0.04}, 1)这7个字母设计哈夫曼编码; 2)这7个字母设计等长编码,至少需要几位二进制数? 3)哈夫曼编码比等长编码使电文总长压缩多少? ...
  • 玩转python的正则表达式|提取字符串的所有数字

    万次阅读 多人点赞 2019-04-25 11:32:35
    zz=re.findall( r'\b[a-z]+\d*\b' , s ) # 必须至少 1 个字母开头,以连续数字结尾或没有数字,,(为何不能把*放前面?因为*表示匹配前面的规则) >>> ['aaa', 'bbb111'] 12)'''注意!注意!注意!注意!注意!...
  • 目录 1. 结论 2. 经典的几种解法 2.1 解法一:O(n*k) 2.2 解法二:O(n*logk) 2.3 解法三:O(n) 2.4 解法四:O(n*logn+k) ...在N个乱序数字中查找第k大的数字,时间复杂度可以减小至O(N)。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 524,076
精华内容 209,630
关键字:

为什么打数字中出现e