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

计算机创新协会冬令营——暴力枚举题目03

经过昨天两道题目的洗礼今天应该是更加的手到擒来吧。接招!

题目

35. 搜索插入位置 - 力扣(LeetCode)

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。(这里先不管,因为力扣这里的测试用例比较少,所以使用暴力枚举依然可以AC题目,我等一下会给出复杂度为logn的方法,对就是二分)

示例

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

提示

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 为 无重复元素 的 升序 排列数组
  • -104 <= target <= 104

Java题解一:暴力枚举

其实这种找什么值的方法,只要是测试用例比较小的,都可以用暴力枚举跑出来,当然了,一般都会有对应的优化方法。这里只需要挨个的找寻目标值或者需要插入的位置即可。一层for循环,比较简单。

class Solution {public int searchInsert(int[] nums, int target) {int res = 0;// 由题目可知,已经是排序数组了,单调递增for (int i = 0; i < nums.length; i++) {// 如果等于目标值if (nums[i] == target){res =  i;}// 不等于,但是符合在中间插入的条件if ( i < nums.length - 1 && nums[i] < target && target < nums[i + 1]){res =  i + 1;}}// 上面两种情况都不满足,但是满足尾部插入的条件if (target > nums[nums.length - 1]){res = nums.length;}return res;}
}

Java题解二:二分查找

在冬令营之后会涉及到二分查找,这也是比较基础的算法内容,因此现在可以理解一下,如果不理解的话先看看,毕竟“熟读唐诗三百首,不会作诗也会吟”是吧,有余力的同学可以看一看。

而且仔细观察题目,要求使用logn复杂度的算法,说的就基本上是二分了

class Solution {public int searchInsert(int[] nums, int target) {//其实在这里看见是一个logn级别的算法那么就已经说明了//这道题需要使用二分查找了int left = 0;int right = nums.length - 1;//在这里采用左闭右闭的原则int middle = 0;while(left <= right){middle = left + (right - left) / 2;if(nums[middle] > target){// 右指针移动right = middle - 1;}else if(nums[middle] < target){// 左指针移动left = middle + 1;}if(nums[middle] == target){// 找到目标值return middle;}}return left;}
}

其他语言解法

C++
class Solution {
public:int searchInsert(vector<int>& nums, int target) {int res = 0;// 由题目可知,已经是排序数组了,单调递增for (int i = 0; i < nums.size(); i++) {// 如果等于目标值if (nums[i] == target) {res = i;}// 不等于,但是符合在中间插入的条件if (i < nums.size() - 1 && nums[i] < target &&target < nums[i + 1]) {res = i + 1;}}// 上面两种情况都不满足,但是满足尾部插入的条件if (target > nums[nums.size() - 1]) {res = nums.size();}return res;}
};
Python3

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:res = 0# 由题目可知,已经是排序数组了,单调递增for i in range(len(nums)):# 如果等于目标值if nums[i] == target:res = i# 不等于,但是符合在中间插入的条件if i < len(nums) - 1 and nums[i] < target and target < nums[i + 1]:res = i + 1# 上面两种情况都不满足,但是满足尾部插入的条件if target > nums[-1]:res = len(nums)return res

总结

简单的遍历,可以适当理解一下二分。

ヾ( ̄▽ ̄)Bye~Bye~

相关文章:

  • 063:vue中一维数组与三维数组联动,类似购物车增减
  • 查看Linux系统内存、CPU、磁盘使用率和详细信息
  • Linux du和df命令
  • web学习笔记(十四)
  • spring-mvc数据绑定和表单标签库(介绍)
  • 51-5 Transformer 论文精读
  • Java反射获取实例并填充注解值
  • 2022 年全国职业院校技能大赛高职组云计算赛项试卷部分解析
  • 对象的复制
  • 【Android Studio】APP练手小项目——切换图片APP
  • 2024开放式耳机测评推荐榜单曝光!超热门开放式耳机选购攻略
  • C++牛客知识点3
  • kubectlkubeletrancherhelmkubeadm这几个命令行工具是什么关系?
  • vue项目心得(复盘)
  • 使用群晖docker将小爱音箱接入chatgpt
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【翻译】babel对TC39装饰器草案的实现
  • 0x05 Python数据分析,Anaconda八斩刀
  • canvas 五子棋游戏
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6之路之模块详解
  • Invalidate和postInvalidate的区别
  • IOS评论框不贴底(ios12新bug)
  • javascript 总结(常用工具类的封装)
  • Java面向对象及其三大特征
  • js操作时间(持续更新)
  • Kibana配置logstash,报表一体化
  • LeetCode算法系列_0891_子序列宽度之和
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Python中eval与exec的使用及区别
  • Vim Clutch | 面向脚踏板编程……
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 基于HAProxy的高性能缓存服务器nuster
  • 近期前端发展计划
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 实习面试笔记
  • 我是如何设计 Upload 上传组件的
  • 小李飞刀:SQL题目刷起来!
  • 一个JAVA程序员成长之路分享
  • 用jQuery怎么做到前后端分离
  • #100天计划# 2013年9月29日
  • #define
  • #LLM入门|Prompt#3.3_存储_Memory
  • #pragma pack(1)
  • #QT项目实战(天气预报)
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (定时器/计数器)中断系统(详解与使用)
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net FrameWork总结
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端