leetcode刷题笔记-数组2

这篇博客主要探讨了LeetCode中的两个数组题目——多数元素和加一问题。对于多数元素,博主介绍了利用哈希映射的解题思路,并提供了C++的官方解决方案。在加一问题上,博主提醒注意进位情况,并分享了Python的简洁解法,包括Python的指数表示和将浮点数数组转换为整数数组的技巧。
摘要由CSDN通过智能技术生成

多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。

这道题主体思想是哈希映射。python的字典就使用了hash的思想。直接贴代码。

class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        n = len(nums)
        over = []
        cnt = [0 for i in range(n)]
        for i in range(len(nums)):
            if nums[i] in over:
               continue
            else:
                over.append(nums[i]) 
        for i in range(len(nums)):
            x = 0
            cnt[over.index(nums[i])]=cnt[over.index(nums[i])]+1
            
        x=cnt.index(max(cnt))
        return(over[x])

我这种写法比较丑,贴一个官方用C++实现的:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map<int, int> counts;
        int majority = 0, cnt = 0;
        for (int num: nums) {
            ++counts[num];
            if (counts[num] > cnt) {
                majority = num;
                cnt = counts[num];
            }
        }
        return majority;
    }
};

收获是,弄清楚了list.index()和list.append()的用法。

加一

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
这道题需要注意的是,可能会出现[9,9,9]->[1,0,0,0]这样的例子。

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        n = len(digits)
        cnt = 0
        
        ans =[]
        for i in range(n):
            cnt = cnt + digits[i]*10**(n-i-1)

        cnt = cnt+1
        c=len(str(cnt))
        tmp = [0 for i in range(c)]
        for i in range(c):
            tmp[i]=int(cnt/(10**(c-i-1)))
            cnt=cnt%(10**(c-i-1))

        return tmp

还有一种巧妙的方法,利用python做出:

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        ##先变成一个整的数字,然后做加法,然后转换成str,再转int加到新的list中
        nums_str = ""
        for i in digits:
            nums_str =nums_str+str(i)
    
        nums_int = int(nums_str)+1
        res = []
        for i in str(nums_int):
            res.append(int(i))
        return res

本问题中学会了python的指数表示:

3**5表示3的5次幂,也就是3*3*3*3*3,等于243
3e5表示3乘以10的5次幂,也就是3*10*10*10*10*10,结果等于300000

学会了把float数组转化成int数组的方式,即map方法:

list = [1.3, 2.3, 4, 5]   #带有float型的列表 
int_list = map(int,list)  #使用map转换
print int_list        
[1, 2, 4, 5]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值