算法练习(7)

题目一:两数之和(难度:简单)

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum

思路:通过哈希表存储数组中每个值的下标,遍历nums中的每个元素即可。

class Solution(object):
    def twoSum(self, nums, target):
        hashs=dict()
        for i,item in enumerate(nums):
            if target-item in hashs:
                return [hashs[target-item],i]
            hashs[item]=i

题目二:最长公共前缀(难度:简单)

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-common-prefix

思路:本人智商比较低,只会暴力破解,详细不阐述。

class Solution(object):
    def longestCommonPrefix(self, strs):
        str=""
        if "" in strs:
            return str
        elif len(strs)>1 and strs[0][0]==strs[1][0]:
            for i in range(len(strs[0])):
                if i<len(strs[1]) and strs[0][i]!=strs[1][i] or i>=len(strs[1]):
                    break
                str+=strs[0][i]
        elif len(strs)==1:
            return strs[0]
        else:
            return str
        index=len(str)
        for i in range(2,len(strs)):
            for j in range(min(len(strs[i]),len(str))):
                if str[j]!=strs[i][j]:
                    index=j
                    str=str[:index]
                    break
                if j==min(len(strs[i]),len(str))-1:
                    index=j+1
        return str[:index]

第三题:4的幂(难度:简单)

给定一个整数,写一个函数来判断它是否是 4 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 4 的幂次方需满足:存在整数 x 使得 n == 4x

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/power-of-four

思路:不使用循环或递归,可以通过位运算判断n是否为2的幂,再通过n对3取模是否为1便可判断出n是否为4的幂。

class Solution(object):
    def isPowerOfFour(self, n):
        return n>0 and (n&(n-1))==0 and n%3==1

第四题:只出现一次的数组Ⅱ(难度:中等)

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/single-number-ii

思路:通过字典存储每个元素出现的次数,然后按值找键即可。

class Solution(object):
    def singleNumber(self, nums):
        dic={}
        for i in nums:
            if i in dic:
                dic[i]+=1
            else :
                dic[i]=1
        return dic.keys()[dic.values().index(1)]

第五题:最大数(难度:中等)

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-number

思路:两两判断组合数的大小,将大的数放到前面,随后将数转换为字符串即可

class Solution(object):
    def largestNumber(self, nums):
        for i in range(len(nums)-1):
            for j in range(i+1,len(nums)):
                if str(nums[i])+str(nums[j])<str(nums[j])+str(nums[i]):
                    nums[i],nums[j]=nums[j],nums[i]
        for i in range(len(nums)):
            nums[i]=str(nums[i])
        if nums[0]=="0": return "0"
        return "".join(nums)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值