【LeetCode与《代码随想录》】数组篇:做题笔记与总结-Java版

news2024/11/23 15:53:45

代码随想录地址
是学习过程中的笔记!图来自代码随想录。

文章目录

    • 理论
    • 题目
      • 704. 二分查找
      • 35. 搜索插入位置
      • 34. 在排序数组中查找元素的第一个和最后一个位置
      • 69. x 的平方根
      • 367.有效的完全平方数

理论

数组是存放在连续内存空间上的相同类型数据的集合。

  • 数组下标都是从0开始的。
  • 数组内存空间的地址是连续的。

因此,我们在添加和删除元素的时候要移动数组内的其他元素。

注意:关于C++的vector,它是容器,不是数组——数组里的元素只能覆盖,不能删除

二维数组在内存的空间地址也是连续的。

题目

704. 二分查找

704. 二分查找

这里有两种方法:左闭右闭区间 和 左闭右开区间。
个人感觉可以左闭右开,也就是右区间取不到的原因是除法是向下取整的,所以要保持右区间大一些。

左闭右闭相关理论:
在这里插入图片描述

class Solution {
public:
    int search(vector<int>& nums, int target) {
    int l=0,r=nums.size()-1;
    int mid;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(nums[mid]>target) r=mid-1;//不在mid处
        else if(nums[mid]<target) l=mid+1;
        else return mid;//等于且找到了
    }
    return -1;
    }
};

左闭右开相关理论:
在这里插入图片描述

class Solution {
public:
    int search(vector<int>& nums, int target) {
    int l=0,r=nums.size();
    int mid;
    while(l<r)
    {
        mid=(l+r)/2;
        if(nums[mid]>target) r=mid;//不在mid处,但右区间取不到,所以等于mid
        else if(nums[mid]<target) l=mid+1;//不在mid处,左区间可以取到,所以等于mid+1
        else return mid;//等于且找到了
    }
    return -1;
    }
};

一些更难的二分拓展

35. 搜索插入位置

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
    int l=0,r=nums.size()-1;
    int mid;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(nums[mid]>target) r=mid-1;
        else if(nums[mid]<target) l=mid+1;
        else return mid;//找到了
    }
    //没找到:应该的位置是l的位置:分为r主动往左走(t太小)和l主动往右走的情况(t太大)
    //r往左走,nums[r]<t,是第一个小于t的位置——所以答案是l所在的位置
    //l往右走,nums[l]>t,是第一个大于t的位置——所以答案是l所在的位置
    return l;
    }
};

34. 在排序数组中查找元素的第一个和最后一个位置

34. 在排序数组中查找元素的第一个和最后一个位置

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
    //找第一个等于t的位置和最后一个等于t的位置
    
    vector<int>ans;
    //数组为空&&左右边界
    if(nums.size()==0||nums.back()<target||nums[0]>target)  return {-1,-1};  

    //找最后一个小于t
    int ans1,ans2;
    int l=0,r=nums.size()-1,mid,temp=0;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(nums[mid]>=target) r=mid-1;
        else l=mid+1;   //这里mid+1不怕超过 因为每次存的答案是r     
        ans1=r;
        temp++;
    }
    if(!temp) return {-1,-1};
    
    //找第一个大于t
    l=0,r=nums.size()-1,temp=0;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(nums[mid]<=target) l=mid+1;
        else  r=mid-1;      
        ans2=l;
        temp++;
    }
    if(!temp) return {-1,-1};
    
    if(ans2-ans1>1) return {ans1+1,ans2-1};

    return {-1,-1};
    }
};

69. x 的平方根

69. x 的平方根

class Solution {
public:
    int mySqrt(int x) {
    int l=0,r=46342;
    int mid;
    while(l<r)
    {
        mid=(l+r)/2;
        if((long long)mid*mid>x) r=mid;
        else if((long long)mid*mid<x) l=mid;
        else return mid;      
        if(r-l==1) return l;
    }

    return 0;//其实绝对不会到这一步
    }
};

367.有效的完全平方数

367.有效的完全平方数

方法一:二分

class Solution {
public:
    bool isPerfectSquare(int num) {
    int l=1,r=46342;
    int mid;
    while(l<=r)
    {       
        mid=(l+r)/2;
        if((long long)mid*mid>num) r=mid-1;
        else if((long long)mid*mid<num) l=mid+1;
        else return true; 
    }
    return false;
    }
};

方法二:数学。

(n+1)2=n2+2n+1

class Solution {
public:
    bool isPerfectSquare(int num) {
    if(num==1) return true;
    int x=1;
    num--;
    while(num>0)
    {
        num-=2*x+1;
        x++;
    }
    if(num==0) return true;
    else return false;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]java毕业设计新能源汽车租赁管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

基于armv8的kvm实现分析(一)虚拟化介绍

本文基于以下软硬件假定&#xff1a; 架构&#xff1a;AARCH64 内核版本&#xff1a;5.14.0-rc5 1 什么是虚拟化 虚拟化就是把一台物理计算机虚拟成多台逻辑计算机&#xff0c;每台逻辑计算机里面可以运行不同操作系统&#xff0c;而相互之间不受影响&#xff0c;其典型架构…

面试了个 985 毕业的同学,回答“性能调优”题时表情令我毕生难忘

又逢“金九银十”&#xff0c;年轻的毕业生们满怀希望与忐忑&#xff0c;去寻找、竞争一个工作机会。已经在职的开发同学&#xff0c;也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。 然而&#xff0c;面试人群众多&#xff0c;技术市场却相对冷淡&#xff0c;面…

JavaIO流:概述

在接触 IO 流前&#xff0c;无论是 变量的声明、数组的创建&#xff0c;又或者是复杂的并发设计还是 Jvm 的性能调优&#xff0c;我们更多的还是和内存打交道。但我们知道计算机组成包括运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备。…

springcloud4:服务注册中心Eureka

直接调用即可&#xff0c;为什么用Eureka什么是服务治理&#xff1f; 多个服务调用&#xff0c;需要有依赖中心管理什么是服务注册&#xff1f; 有一个注册中心&#xff0c;当服务器启动时&#xff0c;会把自己的信息注册到注册中心上什么是服务发现&#xff1f; Client通过注册…

electron打包ffi-napi报错 npm ERR! gyp reason: read ECONNRESET

问题描述 这个问题用了我两天的时间&#xff0c;所以记录一下。 我们项目是使用electronvue&#xff0c;做支付功能的时候需要使用到ffi-napi依赖包。 最后打包的时候ffi-napi报错了&#xff0c;在package.json中去掉ffi-napi就可以打包&#xff0c;但是打包运行后提示缺少ff…

re:Invent 2022,探秘亚马逊云科技的重量级计算创新——Nitro

诞生于16年前的亚马逊云科技&#xff0c;开创了一个全新的云计算领域。秉持着创新与探索精神&#xff0c;自2012年开始&#xff0c;在每年一度的re:Invent全球大会上&#xff0c;亚马逊云科技都会发布最新的云计算技术。对IT产业演进产生了革命性的影响&#xff0c;Nitro系统就…

Java笔记(工厂模式、动态代理、XML)

一、工厂模式 软件设计模式&#xff08;Design pattern&#xff09;&#xff0c;又称设计模式&#xff0c;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的复用性。 什么…

代码随想录算法训练营第四十三天| LeetCode1049. 最后一块石头的重量 II、LeetCode494. 目标和、LeetCode474. 一和零

一、LeetCode1049. 最后一块石头的重量 II 1&#xff1a;题目描述&#xff08;1049. 最后一块石头的重量 II&#xff09; 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将…

让你快速高效的掌握linux内核编译过程

Linux内核编译 一、linux内核的配置与编译&#xff1a; 1.配置内核 1)导入默认配置&#xff1a; make xxxx_defconfig 注1&#xff1a;xxxx表示内核支持的芯片的名称 比如make exynos_defconfig 注2&#xff1a;内核源码中对每个支持的芯片都有默认的配置&#xff0c;默认配置很…

【博学谷学习记录】超强总结,用心分享|架构师-RabbitMQ消息可靠性保障

文章目录一、生产者保证1.1 失败通知1.2 发送方确认1.3 Broker丢失消息二、消费方消息可靠性2.1 消费者手动确认消息依靠三个对象&#xff1a;生产者、消费者、broker一、生产者保证 生产者发送消息到broker时&#xff0c;要保证消息的可靠性&#xff0c;主要的方案有&#xf…

5.28 综合案例2.0-简易起夜灯

HaaS506 - 简易起夜灯简介准备硬件连接图功能实现1.继电器使用说明2. 5.8G雷达感应传感器模块说明3.简易代码3.1测试log简介 案例为了解决晚上起床找不到灯的问题。当你从床上起来时&#xff0c;雷达感应传感器检测到你的活动后自动打开电灯。省去了寻找电灯开关的麻烦。 准备…

java学习笔记 day07-Java基础-综合练习

练习一&#xff1a;飞机票 需求: ​ 机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 ​ 按照如下规则计算机票价格&#xff1a;旺季&#xff08;5-10月&#xff09;头等舱9折&#xff0c;经济舱8.5折&#xff0c;淡季&#xff08;11月到来…

表白墙(web版)

文章目录前言一、需求分析1.表白墙页面设计2.表白墙功能二、实现1.客户端2.服务器端3.连接数据库前言 前面前端部分写过一个表白墙页面&#xff0c;但是它不能存储提交信息&#xff0c;为了能够让它在提交信息后可以保存其信息&#xff0c;页面刷新后信息依然存在&#xff0c;…

itk配准整理(1)

示例地址&#xff1a; itk\ITK\Examples\RegistrationITKv4\ImageRegistration7.cxx 说明&#xff1a;itk二维图像的配准&#xff1a;平移旋转缩放 效果图&#xff1a; 运行结果&#xff1a; 52 53.6213 [0.8333298229719548, -0.17450270771316403, -12.806452097490313, -1…

在Win10中使用YAMAHA S-YXG50软波表

曾经非常经典的一款软波表YAMAHA S-YXG50我个人非常的喜欢。在XP系统的时代&#xff0c;是我必装的软件&#xff0c;用来听一些MIDI音质和效果很好。而如今玩MIDI的人越来越少了&#xff0c;软波表的时代也被人渐渐的遗忘了。 如今想要怀旧的话&#xff0c;只能够找一台老电脑…

LINUX的XEN和KVM到底区别在什么地方?

本文调研的是 Completely Fair Scheduler 算法, 它当前是 Linux 中 SCHED_NORMAL(非实时任务) 一类 task 的默认调度器. 实际上, 运行在 Guest OS 中的应用程序线程还受到 Guest OS 的调度, 分时运行在 vCPU 上, 但这不在本文调研范围内. 本文仅调研 vCPU 被如何调度到 pCPU 上…

WebDAV之葫芦儿·派盘+无聊笔记

无聊笔记 支持webdav方式连接葫芦儿派盘。 无聊笔记是一款深受用户认可的系统工具,随时都可以进行软件的操作,也可以在线进行笔记的记录,系统会进行智能的保存,满足了用户日常中的需求,可以把软件作为备忘录,笔记本,摘抄录等。 无聊笔记是一个功能强大的记录工具,您…

代码随想录算法训练营第四十二天| LeetCode416. 分割等和子集

一、LeetCode416. 分割等和子集 1&#xff1a;题目描述&#xff08;416. 分割等和子集&#xff09; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 2&#xff1a;解题思路 本题需要使用01背包的…

合作动态 | 方正璞华与日立签订战略合作协议,加快推进数字化管理变革!

2022年10月27日&#xff0c;方正璞华PLM事业部负责人王志起先生与日立方代表正式签订“方正璞华PLM产品销售合作框架协议”。 根据协议&#xff0c;双方将围绕璞华PLM产品推广、客户拓展、全生命周期运营服务等领域&#xff0c;开展多元化、多层级的深度融合合作&#xff0c;共…