力扣hot100_技巧_python版本

一、136. 只出现一次的数字

  • 思路:
    • 任何数和 0 做异或运算,结果仍然是原来的数,即 a⊕0=a。
    • 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
    • 异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。
  • 代码:
python 复制代码
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        return reduce(xor, nums)

二、169. 多数元素

  • 代码:
python 复制代码
class Solution:
    def majorityElement(self, nums: List[int]) -> int:
        n = len(nums)
        value_counts = defaultdict(int)
        for i in nums:
            value_counts[i] += 1
        for i in value_counts:
            if value_counts[i] >= n/2:
                return i

三、75. 颜色分类

  • 思路:
    两次遍历,第一次将所有的0归为,第二次将所有的1归为
  • 代码:
python 复制代码
class Solution:
    def sortColors(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        def swap(i, j):
            nums[i], nums[j] = nums[j], nums[i]
        n = len(nums)
        ptr = 0
        for i in range(n):
            if nums[i] == 0:
                swap(i, ptr)
                ptr += 1
        for i in range(n):
            if nums[i] == 1:
                swap(i, ptr)
                ptr += 1  

四、31. 下一个排列

  • 代码:
python 复制代码
class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        n = len(nums)
        i = n-2
        while i >= 0 and nums[i] >= nums[i+1]:
            i -= 1
        
        if i >= 0:
            j = n-1
            while nums[j] <= nums[i]:
                j -= 1
            nums[i], nums[j] = nums[j], nums[i]
        
        left, right = i+1, n-1
        while left<right:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
            right -= 1

五、287. 寻找重复数

python 复制代码
class Solution:
    def findDuplicate(self, nums: List[int]) -> int:
        n, i = len(nums), 0
        while i < n:
            t, idx = nums[i], nums[i] - 1  # t 是当前值,idx 是当前值该放到的位置
            if nums[idx] == t:             # 如果当前值已经在它该在的位置上
                if idx != i:               # 表示当前值 t 和它"应该在的位置"的值相等,说明有重复,立即返回
                    return t
                i += 1
            else:
                nums[i], nums[idx] = nums[idx], nums[i]
        return -1
相关推荐
B站计算机毕业设计之家14 小时前
多模态项目:Python人脸表情系统 CNN算法 神经网络+Adaboost定位+PyQt5界面 源码+文档 深度学习实战✅
python·深度学习·神经网络·opencv·yolo·计算机视觉·情绪识别
大模型真好玩14 小时前
LangGraph实战项目:从零手搓DeepResearch(一)——DeepResearch应用体系详细介绍
人工智能·python·mcp
Boop_wu14 小时前
[数据结构] 哈希表
算法·哈希算法·散列表
MATLAB代码顾问14 小时前
MATLAB绘制9种最新的混沌系统
开发语言·matlab
Goona_14 小时前
PyQt批量年龄计算工具:从身份证到指定日期的周岁处理
python·小程序·交互·pyqt
czliutz15 小时前
R绘制股票日波动线图 中国海油600938
开发语言·r语言·r语言绘图
Mingze031415 小时前
C语言四大排序算法实战
c语言·数据结构·学习·算法·排序算法
B站_计算机毕业设计之家15 小时前
Python+Flask+Prophet 汽车之家二手车系统 逻辑回归 二手车推荐系统 机器学习(逻辑回归+Echarts 源码+文档)✅
大数据·人工智能·python·机器学习·数据分析·汽车·大屏端
共享家952715 小时前
QT-常用控件(三)-显示类
开发语言·qt
William_cl15 小时前
C# MVC网页调试的方法
开发语言·c#·mvc