首页 > 其他分享 >day01

day01

时间:2022-09-21 21:35:13浏览次数:59  
标签:right target nums int day01 middle left

day1

二分查找

二分查找涉及很多的边界条件

while(left < right)
or
while(left <= right)
right = middle;
or
right = middle - 1;

区间的定义不同,边界处理方式不同
区间的定义一般为两种,左闭右闭[left, right],
或者左闭右开[left, right)


左闭右闭

left=0;
right=numsize-1;
while(left<=right){
//
	middle=(left-right)/2; // 因为区间是左闭右闭  左可以等于右边    所以left<=right是合法的
	if(nums[middle]>target){
		right=middle-1;
//nums[middle]>target 说明要搜索的值肯定不包括middle位置上的数,所以是middle-1;
	}else if(nums[middle]<target){
		left=middle+1;
	}
		}

左闭右开
left == right在区间[left, right)是没有意义的
所以 while (left < right)

left=numsize
//
if (nums[middle] > target) {
	right = middle; //涉及到右边界改变时注意,因为是右开区间  如果取middle-1 则可能会漏掉目标值
	} else if (nums[middle] < target) {
    	left = middle + 1; 
    } else { // nums[middle] == target
    	return middle; 
    }
class Solution{
	public int serch(int[] nums,int target){
		if(target<nums[0]||target>nums[nums.length-1]){
			return -1;
		}
		int left=0,right=nums.length-1;
		while(left<=right){
			int mid=left+((right-left)>>1);
			if(nums[mid]==target){
				return mid;
			}else if(nums[mid]<target){
				left=mid+1;
			}else{
				right=mid-1
			}
			return -1;
		}
	}
}
class Solution{
	public int serch(int[] nums,int target){
		if(target<nums[0]||target>nums[nums.length-1]){
			return -1;
		}
		int left=0,right=nums.length;
		while(left<right){
			int mid=left+((right-left)>>1);
			if(nums[mid]==target){
				return mid;
			}else if(nums[mid]<target){
				left=mid+1;
			}else{
				right=mid;
			}
			return -1;
		}
	}
}

LeetCode:27. 移除元素

数组的元素在内存地址中是连续的,不能直接删除某个元素,只能通过覆盖的方式删除。

暴力解法 时间复杂度O(n^2)

class Solution {
    public int removeElement(int[] nums, int val) {
        int length=nums.length;
        for(int i=0;i<nums.length;i++){	
		if(nums[i]==val){
			for(int j=i;j<nums.length-1;j++){
				nums[j]=nums[j+1];
				}
                	length--;
                	i--;  //注意不要忘记i--  每删除一个元素之后 外层的遍历范围减一
			}
		}
        return length;
    }
}

双指针
image

快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组(筛选新元素)
慢指针:指向更新 新数组下标的位置(用来保存新元素)

class Solution {
    public int removeElement(int[] nums, int val) {
        int slow=0;
        for(int fast=0;fast<nums.length;fast++){
            if(nums[fast]!=val){         //不用删除的元素,则快慢指针一起向后遍历,如果遇到要删除的元素则快指针向后,慢指针不动,将元素覆盖。
                nums[slow++]=nums[fast];
            }
        }
        return slow;

}

}

标签:right,target,nums,int,day01,middle,left
From: https://www.cnblogs.com/wdnmdp/p/16717199.html

相关文章

  • python学习day01
    python课总结day011.今日内容概要typora软件安装markdown语法typora软件功能介绍网络博文编写教程计算机的本质计算机的五大组成部分计算机的三大核心硬件2.typ......
  • java学习笔记day01
    笔记基础语法一、注释单行注释://123123多行注释:/*多行注释*/文档注释:/***@Description111*@Author111*/二、基本数据类型1、数据存储的单位​ 位、......
  • day01-项目开发流程
    多用户即时通讯系统011.项目开发流程2.需求分析用户登录拉取在线用户列表无异常退出(包括客户端和服务端)私聊群聊发文件服务器推送新闻/广播3.设计阶段3.1界......
  • 01 uniapp/微信小程序 项目day01
    一.起步1.1配置uni-app开发环境什么是uni-app,就是基于vue的一个开发框架,可以将我们写的一套代码,同时发布到ios、安卓、小程序等多个平台官方推荐使用Hbuilderx来写uni......
  • 前端Day01
                                                   ......
  • JavaLearnDay01
    Java语言名词解释:1.JVM(JavaVirtualMachine):Java虚拟机,用以不同平台,模拟相同的执行环境2.JRE(JavaRuntimeEnvironment):Java运行环境,包含JVM+解释器3.JDK(JavaDevelopmen......
  • Day01学习java的第一太难
    Makdown学习标题字体helloworld!helloworld!helloworld!分割线 引用我是你爹图片超链接我是你亲列表abcabc表格名字性别生......
  • Day01
    Markdowm学习标题二级标题三级标题四级标题 字体Hello,World!Hello,World!Hello,World!Hello,World!Hello,World!引用选择狂神说Java,走向人生巅峰 分割线图片......
  • Day01初识HTML
    HTML+CSS+JavaScript结构+表现+交互重点:1.表单及表单应用​1.表单初级验证什么是HTMLHyperTextMarkupLanguage(超文本语言)超文本包括:文字,......
  • Java项目实战-瑞吉外卖day01
    瑞吉外卖开发笔记 笔记内容为黑马程序员视频内容1、软件开发整体介绍软件开发流程角色分工软件环境  2、瑞奇外卖项目介绍项目介绍 ......