LeetCode-Part 1

 

最近开始学一下算法了,从刷题开始,主要语言选择了python(可能有的题思路不是很好,但是总归有一个学习的过程啦)


#1512 好数对的数目

给你一个整数数组 nums 。

如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。

返回好数对的数目。

思路:

双重循环,当nums[i]=nums[j]时,sum自加1
代码:

class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:
        sum = 0
        for i in range(0,len(nums)):
            for j in range(i+1,len(nums)):
                if nums[j]== nums[i]:
                    sum = sum + 1
        return sum

#1431 拥有最多糖果的孩子

给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。

对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。

思路:

依然还是最简单的思路 for循环判断每个小朋友增加糖果后是不是candies的最大值并将结果添加到isMax数组中

代码:

class Solution:
    def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
        isMax = []

        for i in range(0,len(candies)):
            isMax.append(candies[i] + extraCandies >= max(candies))

        return(isMax)

#1470 重新排列数组

给你一个数组 nums ,数组中有 2n 个元素,按 [x1,x2,...,xn,y1,y2,...,yn] 的格式排列。

请你将数组按 [x1,y1,x2,y2,...,xn,yn] 格式重新排列,返回重排后的数组。

思路:

见到这道题的第一个思路,比较简单。创建x、y、re三个数组,将原数组的前n个放在x中,后n个放在y中,然后按顺序放在重排数组re中

代码:

class Solution:
    def shuffle(self, nums: List[int], n: int) -> List[int]:
        x = []
        y = []
        re = []
        for  i in range(0,n):
            x.append(nums[i])
            re.append(x[i])
            y.append(nums[i+n])
            re.append(y[i])
        return re

#1486 数组异或操作

给你两个整数,n 和 start 。

数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。

请返回 nums 中所有元素按位异或(XOR)后得到的结果。

思路:

创建数组,然后逐个异或

代码:

class Solution:
    def xorOperation(self, n: int, start: int) -> int:
        nums = []
        xor = 0
        for i in range(0,n):
            nums.append(start + 2*i)
        for j in range(0,n):
            xor = nums[j]^xor
        return xor


剑指Offer 58-|| 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

思路:

1.左移的位数
2.新字符串拼接

代码:

class Solution:
    def reverseLeftWords(self, s: str, n: int) -> str:
        n = n%len(s)
        s =s[n:] + s[:n]
        return s

#771 宝石与石头 

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。

思路:

1.将字符串J转为列表
2.遍历J中的元素
3.计算J中每个元素在S中出现的次数
4.将出现的次数逐个累加

代码:

class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
        J = list(J)
        sum = 0
        for i in range(0,len(J)):
            a = S.count(J[i],0,len(S))
            sum +=a
        return sum

#1281 整数的各位积和之差

给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。

思路:

因为不能确定位数,所以不好采用100*这种方法
1.先把int转为str再转为list(好像int不能直接转为list)
2.遍历list中的每个元素并转为int
3.遍历的时候累加和累乘
4.最后返回差值

代码:

class Solution:
    def subtractProductAndSum(self, n: int) -> int:
        sum = 0
        ji = 1
        n = list(str(n))
        for i in range(0,len(n)):
            a = int(n[i])
            sum += a
            ji *= a
        return (ji-sum)
            

#1342 将数字变成0的操作

给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。

思路:

1.先写出来一个数字变成0的过程
2.如果这个数为偶数,则除以2,否则减1,创建if条件语句
3.执行除以2和减1都是操作数+1

代码:

class Solution:
    def numberOfSteps (self, num: int) -> int:
        sum = 0
        while (num!=0):
            if (num%2) == 0:
                num = num / 2
                sum = sum + 1
            else:
                num = num -1
                sum = sum + 1
        return sum

LCP 06 拿硬币

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

思路:

1.判断数组中每个元素的奇偶
2.如果是偶数则该堆的取走需要(该数除以2)的次数
3.如果是奇数则该堆的取走需要(该数+1再除以2)的次数
4.返回次数(需要转为int,否则返回的为float)

代码:

class Solution:
    def minCount(self, coins: List[int]) -> int:
        sum = 0
        for i in range(0,len(coins)):
            if coins[i]%2 == 0:
                sum += coins[i]/2
            else:
                sum += (coins[i]+1)/2
        return int(sum)

#1389 按既定顺序创建目标数组

给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:

目标数组 target 最初为空。
按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。
重复上一步,直到在 nums 和 index 中都没有要读取的元素。
请你返回目标数组。

题目保证数字插入位置总是存在。

思路:

使用insert函数,向数组指定位置添加元素即可

代码:

class Solution:
    def createTargetArray(self, nums: List[int], index: List[int]) -> List[int]:
        target = []
        for i in range(0,len(nums)):
            target.insert(index[i],nums[i])
        return target

                                                                                                                                                                          2020.7.28

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode-Editor是一种在线编码工具,它提供了一个用户友好的界面编写和运行代码。在使用LeetCode-Editor时,有时候会出现乱码的问题。 乱码的原因可能是由于编码格式不兼容或者编码错误导致的。在这种情况下,我们可以尝试以下几种解决方法: 1. 检查文件编码格式:首先,我们可以检查所编辑的文件的编码格式。通常来说,常用的编码格式有UTF-8和ASCII等。我们可以将编码格式更改为正确的格式。在LeetCode-Editor,可以通过界面设置或编辑器设置来更改编码格式。 2. 使用正确的字符集:如果乱码是由于使用了不同的字符集导致的,我们可以尝试更改使用正确的字符集。常见的字符集如Unicode或者UTF-8等。在LeetCode-Editor,可以在编辑器选择正确的字符集。 3. 使用合适的编辑器:有时候,乱码问题可能与LeetCode-Editor自身相关。我们可以尝试使用其他编码工具,如Text Editor、Sublime Text或者IDE,看是否能够解决乱码问题。 4. 查找特殊字符:如果乱码问题只出现在某些特殊字符上,我们可以尝试找到并替换这些字符。通过仔细检查代码,我们可以找到导致乱码的特定字符,并进行修正或替换。 总之,解决LeetCode-Editor乱码问题的方法有很多。根据具体情况,我们可以尝试更改文件编码格式、使用正确的字符集、更换编辑器或者查找并替换特殊字符等方法来解决这个问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值