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

每日算法刷题Day4 5.12:leetcode数组4道题,用时1h

7. 704.二分查找

704. 二分查找 - 力扣(LeetCode)

思想

二分模版题

代码

c++:

class Solution {
public:int search(vector<int>& nums, int target) {int n=nums.size();int left=0,right=n-1;int res=-1;while(left<=right){int mid=left+((right-left)>>1);if(nums[mid]==target)   return mid;else if(nums[mid]>target){right=mid-1;}else{left=mid+1;}}return res;}
};

python:

class Solution:def search(self, nums: List[int], target: int) -> int:n = len(nums)left, right = 0, n - 1res = -1while left <= right:mid = left + ((right - left) >> 1)if nums[mid] == target:return midelif nums[mid] > target:right = mid - 1else:left = mid + 1return res
8. 35.搜索插入位置

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

思想

还是二分查找,当时相对于上一题,题目条件变为“如果目标值不存在于数组中,返回它将会被按顺序插入的位置。”,所以要在初始化res=n(数组里面查找不到肯定插入末端)(这个点一开始写没想好),同时查找过程中更新res

代码

c++:

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int n = nums.size();int left = 0, right = n - 1;int res = n;while (left <= right) {int mid = left + ((right - left) >> 1);if (nums[mid] == target) {return mid;} else if (nums[mid] > target) {right = mid - 1;res = mid;} else {left = mid + 1;}}return res;}
};

python:

class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n = len(nums)left, right = 0, n - 1res = nwhile left <= right:mid = left + ((right - left) >> 1)if nums[mid] == target:return midelif nums[mid] > target:right = mid - 1res = midelse:left = mid + 1return res
9. 69.x的平方根
思想

1.找x的平方根,不利用sqrt函数,就是从[0,x]找,因为有序,可以优化为二分查找,跟第8题一样
2.非负整数x,包括0,left从0开始
3.c++中mid*mid要变成long long,但是python没有这个问题

代码

c++:

class Solution {
public:int mySqrt(int x) {// return (int)sqrt(x);int left = 0, right = x, res = 1;while (left <= right) {int mid = left + ((right - left) >> 1);if ((long long)mid * mid == x)return mid;else if ((long long)mid * mid < x) {left = mid + 1;res = mid;} else {right = mid - 1;}}return res;}
};

python:

class Solution:def mySqrt(self, x: int) -> int:left, right = 0, xres = 0while left <= right:mid = left + ((right - left) >> 1)if mid * mid == x:return midelif mid * mid < x:res = midleft = mid + 1else:right = mid - 1return res
相似题

367. 有效的完全平方数 - 力扣(LeetCode)

10 27.移除元素(简单,学习,双指针)

27. 移除元素 - 力扣(LeetCode)

思想

维护区间[0mleft)不包含val,所以长度为left
1.法一同向双指针:
左指针left为下一个要赋值的位置,右指针为当前待处理位置,如果不等于val,则赋值到left位置,left++。循环退出条件为right>=n

2.法二双向双指针:
左指针left为当前待处理位置,若值等于val,则把右指针right的值赋值过去,且right–,否则left++。循环退出条件left>right

3.法一优势在于维护原先相对顺序,而法二优势在于没有重复赋值

代码

法一:
c++:

class Solution {
public:int removeElement(vector<int>& nums, int val) {int n = nums.size();int left = 0;for (int right = 0; right < n; ++right) {if (nums[right] != val) {nums[left] = nums[right];left++;}}return left;}
};

python:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:n = len(nums)left = 0for right in range(n):if nums[right] != val:nums[left] = nums[right]left += 1return left

法二:
c++:

class Solution {
public:int removeElement(vector<int>& nums, int val) {int n = nums.size();int left = 0, right = n - 1;while (left <= right) {if (nums[left] == val) {nums[left] = nums[right];right--;} else {left++;}}return left;}
};

python:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:n = len(nums)left, right = 0, n - 1while left <= right:if nums[left] == val:nums[left] = nums[right]right -= 1else:left += 1return left

相关文章:

  • IDEA 插件推荐:提升编程效率
  • LeetCode 2094.找出 3 位偶数:遍历3位偶数
  • 101alpha---第10
  • 16.three官方示例+编辑器+AI快速学习webgl_buffergeometry_lines_indexed
  • 嵌入式软件--stm32 DAY 6 USART串口通讯(下)
  • js fetch流式请求 AI动态生成文本,实现逐字生成渲染效果
  • 「光域」系列激光测距传感器:以光为尺,重构空间认知边界
  • Python 处理图像并生成 JSONL 元数据文件 - 固定text版本
  • Oracle19c中的全局临时表
  • 使用vite重构vue-cli的vue3项目
  • TDengine 在金融领域的应用
  • 《Head First 设计模式》第一章 - 笔记
  • 【ASR学习笔记】:语音识别领域基本术语
  • web 自动化之 Unittest 四大组件
  • 一个.Net开发的、用于自动化测试Windows应用程序的开源框架
  • Wpf学习片段
  • 从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?
  • 当生产了~/qt-arm/bin/qmake,可以单独编译其他-源码的某个模块,如下,编译/qtmultimedia
  • Hadoop区别
  • ElasticSearch聚合操作案例
  • 牧原股份子公司与养殖户种猪买卖纠纷案一审胜诉
  • 济南市委副秘书长吕英伟已任历下区领导
  • “行人相撞案”现场视频公布,法院:表述不当造成误导
  • 婚姻登记“全国通办”首日观察:数据多跑路,群众少跑腿
  • 要更加冷静地看待“东升西降”的判断
  • 韩国前国务总理韩德洙加入国民力量党