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

【算法】算法题-20231116

这里写目录标题

  • 一、合并两个有序数组(力扣88 )
  • 二、剑指 Offer 39. 数组中出现次数超过一半的数字
  • 三、移除元素(力扣27)
  • 四、找出字符串中第一个匹配项的下标(28)

一、合并两个有序数组(力扣88 )

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。
请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。

示例 1:

输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3
输出:[1,2,2,3,5,6]
解释:需要合并 [1,2,3] 和 [2,5,6] 。
合并结果是 [1,2,2,3,5,6] ,其中斜体加粗标注的为 nums1 中的元素。
示例 2:

输入:nums1 = [1], m = 1, nums2 = [], n = 0
输出:[1]
解释:需要合并 [1] 和 [] 。
合并结果是 [1] 。
示例 3:

输入:nums1 = [0], m = 0, nums2 = [1], n = 1
输出:[1]
解释:需要合并的数组是 [] 和 [1] 。
合并结果是 [1] 。
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。

def merge(nums1,m,nums2,n):p=0q=0if len(nums1)==0:nums1[:]=nums2[:]else:result=[0]*(m+n)for i in range(m+n):if nums1[i]<=nums2[i]:p+=1elif nums1[i]>nums2[i]:nums1[i]=nums2[i]p+=1if p==m and p!=n:result[i+1:]=nums1[q:]if p!=m and p==n:result[i+1:]=nums1[p:m]if p==m or q==n:break

二、剑指 Offer 39. 数组中出现次数超过一半的数字

数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
思路:既然数组中一定有一个数占比超过总数的一半,那么当数组中的数排序后,正中间的数一定有它。。

def test(nums):nums.sort()return nums[len(nums)//2]
nums=[1, 2, 3, 2, 2, 2, 5, 4, 2]
r=test(nums)
print(r)

三、移除元素(力扣27)

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

def test1(nums,val):slow=0fast=0while fast<len(nums):if nums[fast]!=val:nums[slow]=nums[fast]slow+=1fast+=1return slownums=[3,2,2,3]
val=3
print(test1(nums, val))

四、找出字符串中第一个匹配项的下标(28)

给你两个字符串 haystack 和 needle ,
请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。
如果 needle 不是 haystack 的一部分,则返回 -1 。

示例 1:
输入:haystack = “sadbutsad”, needle = “sad”
输出:0
解释:“sad” 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。

示例 2:
输入:haystack = “leetcode”, needle = “leeto”
输出:-1
解释:“leeto” 没有在 “leetcode” 中出现,所以返回 -1 。

def test6(str1,str2):str3=str1.split(str2)if len(str3)!=1:return len(str3[0])else:return -1
http://www.lryc.cn/news/231339.html

相关文章:

  • 微软允许OEM对Win10不提供关闭Secure Boot
  • 海康G5系列(armv7l) heop模式下交叉编译Qt qmqtt demo,出现moc缺少高版本GLibc问题之解决
  • gRPC协议详解
  • 虹科方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案
  • demo(二)eurekaribbon----服务注册、提供与消费
  • 2023年09月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • python3.8 安装 ssl 模块 和 _ctypes 模块
  • 阿里云99元ECS云服务器老用户也能买,续费同价!
  • 如何使用内网穿透实现远程公网访问windows node.js的服务端
  • WordPress 媒体库文件夹管理插件 FileBird v5.5.4和谐版下载
  • websocket学习笔记【springboot+websocket聊天室demo】
  • echarts:graph图表拖拽节点
  • Unity地面交互效果目录
  • tcp的1对多模型C++处理逻辑
  • 【Python】基础(学习笔记)
  • 目标检测YOLO实战应用案例100讲-基于改进YOLO v5的排水管网缺陷智能识别(续)
  • 《AI超级个体:ChatGPT与AIGC实战指南 》书籍分享
  • C# 使用Microsoft.Office.Interop.Excel库操作Excel
  • 110.42.7.1ping IP延迟代表什么意思,自己延迟高会表示其他人也高延迟吗?
  • 【kafka】springboot工程能发消息,不能收消息
  • 一文解码语言模型:语言模型的原理、实战与评估
  • 【C++11】shared_ptr智能指针使用详解
  • JavaScript对象
  • HTML5中自定义数据属性data-*属性(3)jq如何操作data-*
  • C#中.NET Framework4.8 Windows窗体应用通过EF访问新建数据库
  • LuatOS-SOC接口文档(air780E)--pack - 打包和解包格式串
  • 认知升级:模型与范式转换
  • 【2021集创赛】Arm杯一等奖作品—基于 Cortex-M3 内核 SOC 的动目标检测与跟踪系统
  • 无线WiFi安全渗透与攻防(一) 无线安全环境搭建以及密码生成
  • Windows 11 设置 wsl-ubuntu 使用桥接网络