首页 > 编程语言 >代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素

时间:2022-12-08 10:25:52浏览次数:61  
标签:二分 27 nums 随想录 number fastIndex right 移除 left

tag: #二分 #循环不变量
leetcode 地址:704. 二分查找

代码:

function search(nums: number[], target: number): number {
	let left = 0, right = nums.length - 1
	// 我们假设 target 所在的区间是 [a, b] 左闭右闭
	// 这样当 left === right 的时候是有意义的
	
	while(left <= right) {
		const mid = left + Math.floor((right - left) / 2)
		if(nums[mid] === target) return mid
		if(nums[mid] > target) right = mid - 1
		if(nums[mid] < target) left = mid + 1
	}
	return -1
};

思路解析:
看到有序数组,一般就要想到二分查找
这道题目的关键在于明确循环不变量,而循环不变量一般分为两种:

  • 左闭右闭
  • 左闭右开

这两种都有一个共同点,那就是左闭

通过循环不变量来确定循环条件中 left 与 right 之间的关系(到底是 left < right 还是 left <= right)

tag: #双指针
leetcode 地址:27. 移除元素

代码:

function removeElement(nums: number[], val: number): number {
    let slowIndex: number = 0, fastIndex: number = 0;
    while (fastIndex < nums.length) {
        if (nums[fastIndex] !== val) {
            nums[slowIndex++] = nums[fastIndex];
        }
        fastIndex++;
    }
    return slowIndex;
};

思路解析:

  • 通过两个指针

标签:二分,27,nums,随想录,number,fastIndex,right,移除,left
From: https://www.cnblogs.com/mlkk/p/16965321.html

相关文章

  • 代码随想录训练营第五十六天 | 动态规划
     今天是第五十六天,是距离问题的动态规划 583.两个字符串的删除操作 classSolution{publicintminDistance(Stringword1,Stringword2){int......
  • 代码随想录训练营第五十五天 | (动态规划)
     今天是第五十五天,依旧是动态规划问题的子序列问题 392.判断子序列 classSolution{publicbooleanisSubsequence(Strings,Stringt){intn......
  • 代码随想录Day37
    LeetCode701.二叉搜索树种的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据保证,新值和原始二叉搜索......
  • c++练习272题:金币
    *272题原题传送门:http://oj.tfls.net/p/272题解:(遍历,60分)#include<bits/stdc++.h>usingnamespacestd;longlongallday;//总天数longlongpas;//已经过去longlongmo......
  • js移除数组,删除数组
    一、修改arr的length方法根据修改后的length去除后面的元素。letarr=[1,2,3,4,5,6,7,8,9];arr.length=3;console.log('length',arr.length);//3console.log('a......
  • c++练习271题:水仙花数
    *271题原题传送门:http://oj.tfls.net/p/271题解:#include<bits/stdc++.h>usingnamespacestd;intcf(inta,intb){//a的b次方 intc=a; for(inti=1;i<b;i++)//......
  • 代码随想录算法训练营Day16| 104. 二叉树的最大深度、559.n叉树的最大深度、111. 二叉
    代码随想录算法训练营Day16|104.二叉树的最大深度、559.n叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数104.二叉树的最大深度104.二叉树的最大......
  • 代码随想录Day36
    LeetCode235.二叉搜索树的最近公共祖先给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最......
  • #yyds干货盘点# LeetCode程序员面试金典:移除重复节点
    题目:编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1,2,3,3,2,1]输出:[1,2,3]示例2:输入:[1,1,1,1,2]输出:[1,2]代码实现:classSolu......
  • 2019.10.27二进制学习总结
    今天上午大家讨论学习了二进制。我总结了二进制的以下几个规律。1:十进制中2的次方数每增加1它相对应的二进制的数位次就增加1位。2:二进制的每一位数都是都是有循环变化的。3......