leetcode日常总结七

268,283,414,448,485,532,561
268:缺失正数
题目描述:
给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。
思路:
1:(首项+尾项)**项数//2) 减去 数组总和
2:哈希表比对值和下标是否对应
代码:



class Solution(object):

    def missingNumber(self, nums):

        """

        :type nums: List[int]

        :rtype: int

        """

        b=[]

        for i in range(len(nums)):

            b.append(i)

        a=dict.fromkeys(b,'a')

        for i in range(len(nums)):

            if nums[i]  in a:

                a[nums[i]]=nums[i]

        for i in range(len(nums)):

            if a[i]!=i:

                return i

        return i+1

 


283:移动零
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
思路:
定义两个指针i,j,然后遍历数组,i跟j同时往前走,当遇到0时j停下,i继续往前走,当nums[i]不为0时则将num[i]的元素赋给j的位置,j++,nums[i]被赋值为0。
可以先把所有非0的元素移到前面,然后将后面的位置补0
代码:



class Solution(object):

    def moveZeroes(self, nums):

        """

        :type nums: List[int]

        :rtype: None Do not return anything, modify nums in-place instead.

        """

        i=0

        j=0

        for n in nums:

            if n!=0:

                nums[j]=n

                j+=1

        while j < len(nums):

            nums[j]=0

            j+=1

        return nums


414:第三大的数
题目描述:
给定一个非空数组,返回此数组中第三大的数,如果不存在,则返回数组中最大的数。
思路:
用first, second, third分别保存最大,次大和第三大的数
遍历数组,并将其与first,second,third比较,判断是否需要更新
最后得到第三大的元素,若没有则返回第一大的元素。
代码:

class Solution(object):
    def thirdMax(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max1 = None
        max2 = None
        max3 = None
        for i in nums:
            if i == max1 or i == max2 or i == max3:
                continue
            if max1 == None or i > max1:
                max3 = max2
                max2 = max1
                max1 = i
            elif max2 == None or i > max2:
                max3 = max2
                max2 = i
            elif max3 == None or i > max3:
                max3 = i
        if max3 == None:
            return max1
        else:
            return max3

448:
题目描述:
给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。
思路:
1:将每个数字放到正确的位置上(对应的下标)。若当前位置的元素不等于i+1,将它放到对应的下标nums[i]−1处。再遍历一次数组,那么位置上不是对应的数时,即为缺失的数字
2:在这里插入图片描述

代码:

class Solution(object):
    def findDisappearedNumbers(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        for i in range(len(nums)):
            while nums[i]!=i+1:
                temp=nums[nums[i]-1]
                nums[nums[i]-1]=nums[i]
                nums[i]=temp
                if nums[nums[i]-1]==nums[i]:
                    break
        res=[]
        for i in range(len(nums)):
            if nums[i]!=i+1:
                res.append(i+1)
        print(nums)
        return res

485:最大连续1的个数
题目描述:
给定一个二进制数组, 计算其中最大连续1的个数。
思路:
指针指向子序列的第一个1的位置,当nums[i]为0时,指针指向i的下一个位置,直到出现下一个连续子序列。
代码:



class Solution(object):

    def findMaxConsecutiveOnes(self, nums):

        """

        :type nums: List[int]

        :rtype: int

        """

        max1=0

        i=0

        a=0

        while i < len(nums):

            if nums[i]==1:

                a+=1

                i+=1

                if a>max1:

                    max1=a

            else:

                a=0

                i+=1

                continue

        return max1


532:数组中的K-diff数对
题目描述:
给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对。这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组中的数字,且两数之差的绝对值是 k.
思路:
1、先把数组排序
2、依次计算相邻两个数的绝对值是否等于 k
2-1:如果等于k
2-1-1:判断i 是否等于0,如果等于直接sum++
2-1-2:因为是经过排序了,而且(1,3)和(3,1)算一种,所以每次
绝对值等于K的时候 都要判断nums[i] 是否等于nums[i+1]
2-2:小于k,继续循环
2-3:大于k结束循环,(经过排序了,当前大于k,后面只能更大于k)
代码:

class Solution(object):
    def findPairs(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        size=len(nums)
        if size==0:
            return 0
        nums.sort()
        sum=0
        for  i in range(size):
            if i>0 and nums[i]==nums[i-1]:
                continue
            for j in range(i+1,size):
                if nums[j]-nums[i]==k:
                    sum+=1
                    break
                elif nums[j]-nums[i]>k:
                    break
        return sum

561:数组拆分Ⅰ
题目描述:
给定长度为 2n 的数组, 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大。
思路:
选择配对中最小值的操作,比如 (a,b)可能会产生的最大损失 a−b (如果 a>b)。如果这类配对产生的总损失最小化,那么总和现在将达到最大值。只有当为配对选择的数字比数组的其他元素更接近彼此时,才有可能将每个配对中的损失最小化。
所以排序,将奇数位相加。
代码:
nums.sort()
return sum(nums[::2])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的体育馆管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此体育馆管理系统利用当下成熟完善的SpringBoot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线选择试题并完成答题,在线查看考核分数。管理员管理收货地址管理、购物车管理、场地管理、场地订单管理、字典管理、赛事管理、赛事收藏管理、赛事评价管理、赛事订单管理、商品管理、商品收藏管理、商品评价管理、商品订单管理、用户管理、管理员管理等功能。体育馆管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:体育馆管理系统;SpringBoot框架;Mysql;自动化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值