坚持刷题的第三周(四)

简介: 坚持刷题的第三周(四)

2021-10-28

题目

1.2的幂

给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。


如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。


示例 1:


输入:n = 1

输出:true

解释:20 = 1

示例 2:


输入:n = 16

输出:true

解释:24 = 16

示例 3:


输入:n = 3

输出:false

示例 4:


输入:n = 4

输出:true

示例 5:


输入:n = 5

输出:false


提示:


-231 <= n <= 231 - 1


2.全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。


示例 1:


输入:nums = [1,2,3]

输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:


输入:nums = [0,1]

输出:[[0,1],[1,0]]

示例 3:


输入:nums = [1]

输出:[[1]]


提示:


1 <= nums.length <= 6

-10 <= nums[i] <= 10

nums 中的所有整数 互不相同


3.全排列||

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。


示例 1:


输入:nums = [1,1,2]

输出:

[[1,1,2],

[1,2,1],

[2,1,1]]

示例 2:


输入:nums = [1,2,3]

输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]


 4.组合两个表


image.png



5.重新排序得到 2 的幂

给定正整数 N ,我们按任何顺序(包括原始顺序)将数字重新排序,注意其前导数字不能为零。


如果我们可以通过上述方式得到 2 的幂,返回 true;否则,返回 false。


示例 1:


输入:1

输出:true

示例 2:


输入:10

输出:false

示例 3:


输入:16

输出:true

示例 4:


输入:24

输出:false

示例 5:


输入:46

输出:true


题解

1.2的幂

这个题我们直接可以用与运算来写出如果n&(n-1)==0返回true就证明这是是2的幂数,明天我可能就会更新一些运算符的使用,有一些运算符在写踢的时候是很方便的,还要注意一点这个是要大于0的!


2.全排列

本题就是一个简单的回溯加剪枝,我们在回溯的条件上添加一个剪枝,判断每一个排序中是否已经有了该元素,如果有了就直接跳过此次循环,每次回溯的终止条件就是子元素的长度是否等于给定的长度,我们来借鉴一下官方的图:


image.png


看图是能比较好理解的,如果大家懂了这个图的原理,还有回溯的原理就可以直接下手本题了!!


3.全排列||

本题是上一题的一个进阶问题,本题多出了两个条件,给的数组里面的元素是可以重复的,但是排序的结果是不能重复的。


我们还是用回溯加剪枝,我们还需要把每个重复的元素给经行一个标记,我们可以创建一个新的全为0等长的列表,然后判断如果有重复的,则对应新列表重复的下标转化为1,在回溯的时候判断,如果新列表的哪个下标为1就直接跳过此次循环,这样就去重了一些,然后回溯在进行排序。


4.组合两个表

本题考的就是两个表的如何合并,在MySQL中我们可以先用outer join合并这两个表,然后在在合并的表中进行查询,这个是一个基本的思路,我最后测试了一下效率不是很高但是没有什么问题。


5.重新排序得到 2 的幂

本题是今天的每日一题,本题有一种解法就是用回溯加对2幂数经行判断,我最开始写的几道题就是为这个题做铺垫,但是呢我并没有用那种方法去写嘿嘿嘿嘿,我看到了一个新的思路。就是我们可以把2的31个幂数列举出来,然后在给这些幂函数转化为二进制的数,并放在列表中,我们也把目标数转化为二进制数放在列表中,然后经行a和b两个数组进行对比如果相等就返回true,反之返回false。


6.买股票的最佳时机

image.png


代码

1.2的幂

class Solution:
    def isPowerOfTwo(self, n: int) -> bool:
        return n>0 and n&(n-1)== 0

2.全排列  

class Solution:
    def permute(self, nums: List[int]) -> List[List[int]]:
        res = []
        def trace (nums,path):
            if len(path) == len(nums):
                res.append(list(path))
                return
            for i in nums:
                if i in path:
                    continue
                path.append(i)
                trace(nums,path)
                path.pop()
        trace(nums,[])
        return res

3.全排列||

 

 

 

class Solution:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = []
        check =[0 for i in range(len(nums))]
        def trace (nums,path,check):
            if len(path) == len(nums):
                    res.append(list(path))
                    return
            for i in range(len(nums)):
                if check[i] == 1:
                    continue
                if i>0 and nums[i]==nums[i-1] and check[i-1] ==0:
                    continue
                check[i]=1
                trace(nums,path+[nums[i]],
                      check)
                check[i]=0
        trace(nums,[],check)
        return res
class Solution1:
    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = []
        check = [0 for i in range(len(nums))]
        def backtrack(sol, nums, check):
            if len(sol) == len(nums):
                res.append(list(sol))
                return
            for i in range(len(nums)):
                if check[i] == 1:
                    continue
                if i > 0 and nums[i] == nums[i-1] and check[i-1] == 0:
                    continue
                check[i] = 1
                backtrack(sol+[nums[i]], nums, check)
                check[i] = 0
        backtrack([], nums, check)
        return res

         

4.组合两个表

select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId
;

5.重新排序得到 2 的幂

class Solution:
    def reorderedPowerOf2(self, n: int) -> bool:
        def check(targ: int, num: int) -> bool:
            a = [0 for _ in range(10)]
            b = [0 for _ in range(10)]
            while targ:
                x = targ % 10 
                a[x] += 1
                targ //= 10
            while num:
                x = num % 10
                b[x] += 1
                num //= 10
            return a == b
        for i in range(31):
            targ = 2 ** i
            if check(targ, n) == True:
                return True
        return False

6.买卖股票的最佳时机

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if n == 0: return 0 # 边界条件
        dp = [0] * n
        minprice = prices[0] 
        for i in range(1, n):
            minprice = min(minprice, prices[i])
            dp[i] = max(dp[i - 1], prices[i] - minprice)
        return dp[-1]

 


相关文章
|
11月前
|
算法
蓝桥杯算法竞赛第一周题型总结
蓝桥杯算法竞赛第一周题型总结
67 0
洛谷每日三题之第三天(第四天补做)
洛谷每日三题之第三天(第四天补做)
洛谷每日三题之第三天(第四天补做)
|
存储 算法
每日一题冲刺大厂第八天 二叉树深度
大家好,我是泡泡,给大家带来每日一题的目的是为了更好的练习算法,我们的每日一题这个月进度是数据结构,让大家练到各种各样的数据结构题目,熟悉数据结构的增删改查,一年以后,蜕变成为一个不一样的自己!
101 0
|
机器学习/深度学习 人工智能
蓝桥杯倒数七天冲刺国一之每日复习第三天
大家好,我是泡泡,今天继续复习
163 0
|
定位技术
蓝桥杯倒数七天冲刺国一之每日复习第五天
大家好,我是泡泡,今天给大家带来复习的内容,因为复习,所以一带而过啦
102 0
|
决策智能
蓝桥杯倒数七天冲刺国一之每日复习第四天
我是泡泡,因为是复习之前做过的,所以题解一带而过了,大家坚持!
78 0
蓝桥杯倒数七天冲刺国一之每日复习第六天
大家好,我是泡泡,今天是复习第六天!今天有事,稍微水一下
104 0
蓝桥杯真题31日冲刺国一 | 每日题解报告 第八天
大家好,我是泡泡,今天继续给大家带来题解
127 0
|
人工智能 测试技术
蓝桥杯倒数七天冲刺国一之每日复习第二天
距离蓝桥杯还有六天!!各位加油!!!不要忘了打印准考证测试环境!
93 0
蓝桥杯真题31日冲刺国一 | 每日题解报告 第十四天
大家好,我是泡泡,今天的题很多都是模板,大家要记好哦
135 0
下一篇
无影云桌面