首页 > 其他分享 >day01 704. 二分查找&&27. 移除元素

day01 704. 二分查找&&27. 移除元素

时间:2025-01-14 19:21:24浏览次数:1  
标签:27 temp nums 704 mid int 移除 left 指针

二分查找(search方法)
public int search(int[] nums, int target) {
int left=0;
int right=nums.length-1;
int mid;
while(left<=right){
mid=(left+right)/2;
if(nums[mid]==target){
return mid;
}else if(nums[mid]<target){
left=mid+1;
}else{
right=mid-1;
}
}
return -1;
}

  1. 算法原理

二分查找是一种在有序数组中查找特定元素的高效算法。其基本思想是将数组分为两半,通过比较中间元素与目标值,逐步缩小搜索范围,直到找到目标值或搜索范围为空。
时间复杂度:O(log n),其中n是数组的长度。每次比较后,搜索范围减半,因此对数级别的复杂度使得二分查找在处理大数据集时非常高效。
空间复杂度:O(1),只需要常数级的额外空间存储指针和中间变量。
2. 代码实现

初始化:定义两个指针left和right,分别指向数组的起始和末尾。
循环条件:while (left <= right),确保搜索范围有效。
计算中间索引:mid = (left + right) / 2,注意这里可以优化为mid = left + (right - left) / 2,避免整数溢出。
比较与更新指针:
如果nums[mid] == target,返回mid。
如果nums[mid] < target,更新left = mid + 1,搜索右半部分。
如果nums[mid] > target,更新right = mid - 1,搜索左半部分。
返回值:如果未找到目标值,返回-1。
3. 常见错误

索引越界:确保在更新指针时,指针始终在数组的有效范围内。
死循环:确保每次循环都能缩小搜索范围,避免无限循环。

原地移除元素(removeElement方法)
public int removeElement(int[] nums, int val) {
int temp=nums.length-1;
int i=0;
while (i<=temp){
if(nums[i]val){
while (temp>-1&&nums[temp]
val){
temp--;
}
if(i>temp)break;
nums[i]=nums[temp];
nums[temp]=val;
temp-=1;
}
i++;
}
return i;
}
1.算法原理

原地移除是指在不使用额外数组的情况下,移除数组中所有等于特定值的元素,并返回新数组的长度。通过双指针技术,可以在一次遍历中完成任务。
时间复杂度:O(n),其中n是数组的长度。每个元素最多被访问两次(一次由i指针,一次由temp指针)。
空间复杂度:O(1),只需要常数级的额外空间存储指针。
2. 代码实现

初始化:定义两个指针i和temp,分别指向数组的起始和末尾。
循环条件:while (i <= temp),确保搜索范围有效。
查找和替换:
如果nums[i] == val,从数组末尾找到第一个不等于val的元素,将其移到i位置,并将val移到末尾,更新temp。
如果i > temp,说明后面没有不等于val的元素了,退出循环。
更新指针:i++,继续检查下一个元素。
返回值:返回i,即新数组的长度。
3. 常见错误

索引越界:确保在更新指针时,指针始终在数组的有效范围内。
逻辑错误:确保在替换元素时,temp指针正确更新,避免重复替换或遗漏。

总结
通过实现二分查找和原地移除元素这两个算法,我深刻体会到了算法设计中的关键点,如边界条件处理、指针更新和循环条件控制。这些算法不仅在理论上有重要意义,而且在实际应用中也非常实用。通过不断练习和优化,可以提高编程能力和算法思维。

标签:27,temp,nums,704,mid,int,移除,left,指针
From: https://www.cnblogs.com/lin0304/p/18671435

相关文章

  • 计算机毕业设计—270917 SSM流浪宠物领养系统(源码免费领)
    摘 要流浪宠物一直是影响城市环境与居民生活的一个不可忽略的因素。基于此,本文设计并实现一个流浪宠物领养系统。用户可以通过本系统查看搜索流浪宠物的相关信息、进行领养申请,为其提供爱心帮助。本系统有效地解决了流浪宠物领养工作开展困难等问题,为流浪宠物与社会爱动物......
  • C语言初阶习题【27】猜名次
    1.题目描述5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。2.思路3.代码实现#include<stdio.h>in......
  • JSP兰州市邮政公司新邮预订户管理信息系统pk277(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、课题名称兰州市邮政公司新邮预订户管理信息系统二、研究背景与意义随着电子商务的快速发展和人们对快递服务需求的增加,邮政公司成为现代社会......
  • 题山采玉:移除链表元素
    嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的passion。准备好和我一起冲进代码的奇幻宇宙了吗?Let'sgo!我的博客:yuanManGan我的专栏:C++入门小馆 C......
  • LeetCode 2275: 按位与结果大于零的最长组合题解
    LeetCode2275:按位与结果大于零的最长组合题解1.题目分析这道题目考察了位运算的基本概念和应用。我们需要在给定的数组中找出最长的子序列,使得这些数字进行按位与运算后的结果大于0。1.1关键概念按位与运算(&)两个二进制位都为1时,结果为1。只要有一个为0,结果就为0......
  • 算法2:移除元素
    一、前言题目链接:27.移除元素-力扣(LeetCode)给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行......
  • 2025/1/12 力扣每日一题(2275.按位与结果大于零的最长组合)
    来源:力扣(LeetCode)链接:https://leetcode.cn/problems/largest-combination-with-bitwise-and-greater-than-zero/description/?envType=daily-question&envId=2025-01-12题目:对数组nums执行按位与相当于对数组nums中的所有整数执行按位与。例如,对nums=[1,5,3]来......
  • SAP SD学习笔记27 - 贩卖契约(框架协议)2 - 基本契约 - 金额契约(价值合同)
    上一章讲了贩卖契约(框架协议)的概要,以及贩卖契约中最为常用的基本契约-数量契约。SAPSD学习笔记26-贩卖契约(框架协议)的概要,基本契约-数量契约-CSDN博客本章继续讲SAP中的内容:-基本契约-金额契约目录1,基本契约-金额契约1-1,基本契约-金额契约概要1-2,有......
  • [2753]基于JAVA的自习室预约智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的自习室预约智慧管理系统的设计与实现指导老师(一)选题的背景和意义在当前社会环境下,随着科技的发展和互联网的普及,人们的生活、学习方式也发生了巨大的变化。尤其是对于在校大学生来说,如何有效地利用自习室资源,提高......
  • [2749]基于JAVA的能源管理绩效评估智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的能源管理绩效评估智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景与意义随着社会经济的快速发展和人口增长,能源需求持续增加,资源环境压力日益增大。能源管理作为解决这一问题的重要手段,其重要性不......