当前位置: 首页 > news >正文

力扣hot100_技巧_python版本

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

在这里插入图片描述

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

二、169. 多数元素

在这里插入图片描述

  • 代码:
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归为
  • 代码:
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. 下一个排列

在这里插入图片描述

  • 代码:
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. 寻找重复数

在这里插入图片描述

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

相关文章:

  • Multisim使用说明详尽版--(2025最新版)
  • 高效爬虫:一文掌握 Crawlee 的详细使用(web高效抓取和浏览器自动化库)
  • CS5346 - Interactivity in Visualization 可视化中的交互
  • Java 架构设计:从单体架构到微服务的转型之路
  • 大语言模型深度思考与交互增强
  • 策略模式随笔~
  • 适合单片机裸机环境的运行的软件定时器框架
  • Linux 下 Module 工具的介绍与使用
  • 深入解读:2024 可信数据空间建设及应用参考指南【附全文阅读】
  • Go 语言中的局部变量是分配在栈区还是堆区
  • 数据结构-限定性线性表 - 栈与队列
  • 在Mac上离线安装k3s
  • HarmonyOS:页面滚动时标题悬浮、背景渐变
  • 【微服务管理】深入理解 Gateway 网关:原理与实现
  • fbx/obj/glb/gltf/b3dm等通用格式批量转换成osgb
  • STL之priority_queue的用法与实现
  • 第一阶段补充知识
  • 【信息系统项目管理师】高分论文:论信息系统项目的范围管理(投资信息化全流程管理项目)
  • TestHubo安装及入门指南
  • MuJoCo 机械臂关节路径规划+轨迹优化+末端轨迹可视化(附代码)
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出
  • 一位排球青训教练的20年时光:努力提高女排球员成才率
  • 解放日报头版聚焦“人民城市”:共建共享展新卷
  • 解放日报头版:人民城市共建共享展新卷
  • 绵阳造AI机器狗参与警务工作,演练中辅助民警控制“嫌疑人员”
  • 李祥翔评《孔子哲学思微》︱理性秩序与美学秩序的碰撞