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

重新刷题求职2-DAY1

DAY1

1.704. 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

最普通的二分查找,查用的习惯左闭右开

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        left, right = 0, len(nums)

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

            if nums[mid] < target:
                left = mid + 1
            else:
                right = mid
        
        return left if left < len(nums) and nums[left] == target else -1

2.27. 移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

用户评测:

评测机将使用以下代码测试您的解决方案:

int[] nums = [...]; // 输入数组
int val = ...; // 要移除的值
int[] expectedNums = [...]; // 长度正确的预期答案。
                            // 它以不等于 val 的值排序。

int k = removeElement(nums, val); // 调用你的实现

assert k == expectedNums.length;
sort(nums, 0, k); // 排序 nums 的前 k 个元素
for (int i = 0; i < actualLength; i++) {
    assert nums[i] == expectedNums[i];
}

如果所有的断言都通过,你的解决方案将会 通过

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3,_,_,_]
解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

这道题本身不难,但是可以运用一下快慢指针的思想,以及两种写法

一种是 slow, fasst

while fast< len(nums):

一种是使用for 循环来写。

因为这里的循环终止条件是快指针遍历完毕所有的元素。

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        # 快慢指针,fast 寻找下一个不等于val的index,并赋值给当前的slow,直到遍历完毕
        # 最终slow的大小和k数量总和一致
        slow = 0
        for fast in range(len(nums)):
            if nums[fast] != val:
                nums[slow] = nums[fast]
                slow += 1

        return slow

http://www.kler.cn/a/531614.html

相关文章:

  • 技术架构师成长路线(2025版)
  • K8S集群架构及主机准备
  • 基于人脸识别的课堂考勤系统
  • LeetCode 2909. 元素和最小的山形三元组 II
  • 关于安卓greendao打包时报错问题修复
  • MySQL数据库环境搭建
  • 鸟哥Linux私房菜第四部分
  • 【文件上传】
  • webpack-编译原理
  • 基于SpringBoot的美食烹饪互动平台的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 一些单转多路电源芯片介绍及使用
  • 电脑开机键一闪一闪打不开
  • 热点账户优化和影子表压测
  • Mac电脑上好用的压缩软件
  • 普罗米修斯监控服务搭建位置全解析:权衡与抉择
  • 在客户现场可快速落地体验的智慧能源开源了。
  • Maven工程核心概念GAVP详解:从命名规范到项目协作的基石
  • 一文讲解HashMap线程安全相关问题(下)
  • Java—双列集合
  • 用FormLinker实现自动调整数据格式,批量导入微软表单
  • 使用VCS对Verilog/System Verilog进行单步调试的步骤
  • 在VS Code中基于TypeScript使用Vue.js搭建Babylon.js的开发环境
  • C# 接口介绍
  • 基于Kamailio、MySQL、Redis、Gin、Vue.js的微服务架构
  • 如何让DeepSeek恢复联网功能?解决(由于技术原因,联网搜索暂不可用)
  • 第 2 天:创建你的第一个 UE5 C++ 项目!