首页 > 编程语言 >23年暑假大一第一周编程练习

23年暑假大一第一周编程练习

时间:2023-07-27 22:55:06浏览次数:42  
标签:index right 第一周 23 nums 大一 pivot nums1 left

23年暑假大一第一周编程练习

1.消失的数字:

def find_missing_number(nums):
    # 计算完整数组的和
    complete_sum = sum(range(1, len(nums) + 2))  # range包:[1,7)
    # print(complete_sum)       # 1+2+3+4+5+6=21
    # 计算数组中所有数的和
    array_sum = sum(nums)
    # print(array_sum)          # 1+2+4+5+6=18
    # 返回缺失的整数
    return complete_sum - array_sum

nums = [1, 2, 4, 5, 6]
print(find_missing_number(nums))  # 输出3

image-20230727193941789

2.移除元素

def removeElement(nums, val):
    # 双指针
    slow = 0
    for fast in range(len(nums)):
        if nums[fast] != val:
            nums[slow] = nums[fast]
            slow += 1
    return (slow, nums)

nums = [0, 1, 2, 2, 3, 0, 4, 2]
val = 2
print(removeElement(nums, val))

image-20230727212550373

3.合并两个有序数组

def merge(nums1, m, nums2, n):
    #nums1[m:]是nums1从索引m(即最后一个有效元素)到最后的部分
    #我们将nums2的全部元素赋值给nums1的这段部分
    nums1[m:] = nums2
    #然后我们对nums1进行排序
    nums1.sort()
    print(nums1)


nums1 = [1, 2, 3, 0, 0, 0]
m = 3
nums2 = [2, 5, 6]
n = 3
merge(nums1, m, nums2, n)

image-20230727214644240

4.多数元素

def majorityElement(nums):
    count = 0
    candidate = None

    for num in nums:
        if count == 0:
            candidate = num
        count += 1 if num == candidate else -1

    return candidate

# 示例用法
nums = [2, 2, 1, 1, 1, 2, 2]
majority_element = majorityElement(nums)
print(f"多数元素是:{majority_element}")

image-20230727221054316

5.盛最多水的容器

def max_area(height):
    left = 0
    right = len(height) - 1
    max_area = 0

    while left < right:
        area = min(height[left], height[right]) * (right - left)
        max_area = max(max_area, area)

        if height[left] < height[right]:
            left += 1
        else:
            right -= 1

    return max_area
height = [1,8,6,2,5,4,8,3,7]
print(max_area(height))

image-20230727221709117

6.搜索插入位置

def searchInsert(nums, target):
    left = 0
    right = len(nums) - 1

    while left <= right:
        mid = (left + right) // 2

        if nums[mid] == target:
            return mid

        elif nums[mid] < target:
            left = mid + 1

        else:
            right = mid - 1

    # 当循环结束时,left 指针表示插入位置的索引
    return left

nums = [1,3,5,6]
target = 5

print(searchInsert(nums, target))

image-20230727222556618

7.存在重复元素

def containsDuplicate(nums):
    num_set = set()

    for num in nums:
        if num in num_set:
            return True
        num_set.add(num)

    return False


nums = [1, 2, 3, 1]  # true
print(containsDuplicate(nums))
nums = [1, 2, 3, 4]  # false
print(containsDuplicate(nums))

image-20230727223058078

8.数组中的第K个最大元素

import random


def findKthLargest(nums, k):
    left = 0
    right = len(nums) - 1

    while True:
        pivot_index = random.randint(left, right)
        pivot_position = partition(nums, left, right, pivot_index)

        if pivot_position == k - 1:
            return nums[pivot_position]

        elif pivot_position > k - 1:
            right = pivot_position - 1

        else:
            left = pivot_position + 1


def partition(nums, left, right, pivot_index):
    pivot_value = nums[pivot_index]
    nums[pivot_index], nums[right] = nums[right], nums[pivot_index]
    store_index = left

    for i in range(left, right):
        if nums[i] > pivot_value:
            nums[i], nums[store_index] = nums[store_index], nums[i]
            store_index += 1

    nums[store_index], nums[right] = nums[right], nums[store_index]

    return store_index

nums = [3,2,1,5,6,4]
k = 2
print(findKthLargest(nums, k))

image-20230727223424458

标签:index,right,第一周,23,nums,大一,pivot,nums1,left
From: https://www.cnblogs.com/xhboo/p/17586346.html

相关文章

  • 2023-07-27:最长可整合子数组的长度, 数组中的数字排序之后,相邻两数的差值是1, 这种数组
    2023-07-27:最长可整合子数组的长度,数组中的数字排序之后,相邻两数的差值是1,这种数组就叫可整合数组。给定一个数组,求最长可整合子数组的长度。答案2023-07-27:算法maxLen的过程如下:1.检查输入数组是否为空,如果为空,则返回0,表示最长可整合子数组长度为0。2.初始化长度为1的最长......
  • 暑假专题训练 dp 2023-7-26
    L.HamiltonianWall算法:dp做法:由于要一笔将所有黑块都划出来。所以我们状态转移方程应尽可能从左上角或者右下角的黑方块转移过来。$$f[i,j]=f[i,j-1]+1\(wall[i,j-1]=B,w[i,j]=B)$$$$f[i][j]=f[i+1][j-1]+2\(i==1,wall[i+1][j-1]==B,wal......
  • 20230727
    复赛树塔问题只需要知道\(f\left[i,j\right]\)是从\(f\left[i+1,j\right]\)还是\(f\left[i+1,j+1\right]\)转移来就可以,不需要知道\(f\left[i+1,j\right]\)和\(f\left[i+1,j+1\right]\)是怎么计算出的,这就是无后效性。......
  • 2023.7.27 周四:static
    1publicclassStudent{2privateintage;//非静态变量3privatestaticintscore;//静态变量4publicvoidrun(){56}7publicstaticvoidgo(){89}1011publicstaticvoidmain(String[]args){12Stud......
  • CF623E Transforming Sequence
    难点在于卡__int128(?)。首先\(N>K\)显然无解,只需考虑\(N\leK\)的情况。然而这并没有什么用。把\(b\)看作集合,显然\(b_i\subsetb_{i+1}\)。所以令\(f_{n,i}\)为考虑到\(b_n\)且\(|b_n|=i\)的方案数,集合元素无序,即选择\(\{A,B,C\}\)或者\(\{A,B,D\}\in\{A,B,C,D......
  • 2023-7-27 WPF自定义命名空间在xaml中的使用
    xaml自定义命名空间【作者】长生为啥要用自定义命名空间这是常见的几种命名空间xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:Rxsfadsf"xmlns:s......
  • 2023-7-27WPF的ContextMenu的传参绑定方式
    WPF的ContextMenu的绑定方式【作者】长生ContextMenu为何不能正常绑定在wpf中ContextMenu和ToolTip一样都是弹出层,与VisualTree已经分离了,只不过ToolTip在wpf中有进行特殊处理,所以可以正常绑定。个人觉得ContextMenu绑定的最可靠的方式首先添加BindingProxy类,继承Freezab......
  • PhpStorm 2023 for Mac永久激活版下载(免登陆版)
    Phpstorm是一款由JetBrAIns开发的PHP集成开发环境(IDE)。它提供了许多功能来简化PHP应用程序开发,包括代码编辑、调试、代码分析、测试和版本控制等。PhpStorm2023forMac永久激活版下载 以下是Phpstorm的一些主要特点:代码编辑器:Phpstorm具有智能代码编辑器,支持语法高亮、代......
  • idea2023.1.3 最新激活教程
    说明本教程用来激活 idea2023.1.3版本。激活效果 下载idea2023.1.3版本客户端官网地址:https://www.jetbrains.com/idea/download/other.html根据自己所需下载相应的版本安装(解压)idea2023.1.3版本客户端解压版本的直接在自己的软件安装目录解压即可安装版本一路nex......
  • 行业追踪,2023-07-27
    自动复盘2023-07-27凡所有相,皆是虚妄。若见诸相非相,即见如来。k线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让市场来告诉你跟踪板块总结:成交额超过100亿排名靠前,macd柱由绿转红成交量要大于均线有必要给每个行......