首页 > 试题广场 >

求时间空间复杂度最优算法

[编程题]求时间空间复杂度最优算法
  • 热度指数:301 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一副杂乱的扑克牌(不包含大小王),缺失了一张牌,现剩51张,请用最快的方法找出丢失的是1 ~ 13中的哪一张(不区分花色)。
输入:一个长度为51的数组p,代表现剩扑克牌,如: p[0] = 1,p[1] = 4 ...

输出:缺少扑克牌的点数

要求:时间复杂度和空间复杂度尽量小



示例1

输入

[1,2,1,2,3,1,1,2,2,3,3,3,4,4,5,5,4,4,5,5,6,6,7,7,6,6,7,7,8,8,9,9,8,8,10,10,11,11,10,10,11,11,13,13,12,12,12,12,13,13,9]

输出

9

备注:

要求:时间复杂度和空间复杂度尽量小

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 查找缺少一个张牌的方法,入参 是 数组P(一副51张牌的数组),输出 具体那张牌的数值
     * @param p int整型一维数组 一个长度为51的数组p,代表现剩扑克牌,如: p[0] = 1,p[1] = 4 ...
     * @param pLen int p数组长度
     * @return int整型
     */
    int findLostCard(int* p, int pLen) {
        // write code here
        int ans=364;
        for(int i=0;i<51;i++){
            ans-=p[i];
        }
        return ans;
    }
};

发表于 2022-02-26 14:21:08 回复(0)
class Solution:
    def findLostCard(self , p ):
        return 4*13*7 - sum(p[i] for i in range (0, len(p)))

发表于 2022-03-29 16:04:25 回复(0)
异或
发表于 2022-06-04 21:40:52 回复(0)
class Solution:
    def findLostCard(self , p):
        dic = {}
        for i in range(0,len(p)):
            if p[i] not in dic:
                dic[p[i]] = 1
            else:
                dic[p[i]] += 1
        print(dic)
        for j in dic:
            if dic[j] != 4:
                return j


发表于 2022-07-30 18:31:30 回复(0)
importjava.util.*;
 
public class Solution {
    public int findLostCard (int[] p) {
        Arrays.sort(p);
        int res = 0;
        for(int i =0;i<p.length;i++){
            res = res^p[i];
        }
        return res;
    }
}
编辑于 2022-03-21 10:17:09 回复(0)
class Solution:
    def findLostCard(self , p ):
        # write code here
        map={}
        for i in range(0,len(p)):
            if p[i] not in map:
                map[p[i]]=1
            else:
                map[p[i]]+=1
        for i in range(0, len(p)):
            if map[p[i]]!=4:
                return p[i]


发表于 2022-03-21 10:15:23 回复(0)
class Solution:
    def findLostCard(self , p ):
        # write code here
        h={}
        for i in range(len(p)):
            if p[i] not in h:
                h[p[i]]=1
            else:
                h[p[i]]+=1
        for num in h:
            if h[num]==4:
                continue
            else:
                return num

发表于 2022-03-17 22:20:08 回复(0)
class Solution:
    def findLostCard(self , p ):
        temp_num = 0
        for i in p:
            temp_num  ^= int(i)
        return temp_num

发表于 2022-03-04 19:51:25 回复(0)
class Solution:
    def findLostCard(self , p ):
        # write code here
        for i in range(13):  # 准备遍历
            if p.count(i+1) == 3:
                return i+1

发表于 2022-02-28 15:46:15 回复(0)
from collections import Counter
class Solution:
    def findLostCard(self , p ):
        # write code here
        a = sorted(Counter(p).most_common(), key=lambda x:x[1])[0]
        return a[0]

发表于 2022-02-21 17:38:11 回复(0)