秋招突击——7/9——复习{Java实现——LRU,Java实现——搜索插入位置}——新作{二分查找——搜索二维矩阵}

文章目录

    • 引言
    • 复习
      • Java实现——LRU缓存
        • 对照实现
      • Java实现——搜索插入位置
        • java实现
        • 知识补充
    • 新作
      • 搜索二维矩阵
        • 个人实现
        • 参考实现
    • 总结

引言

  • 以后都要向使用Java刷算法进行过滤了,所以今天主要是复习为主,复习两道之前做过的题目,然后做两道新的题目。
  • 今天继续加油吧!

复习

Java实现——LRU缓存

  • 第一次学习链接
  • 第二次学习链接
  • 题目链接
对照实现
  • 如果要使用Java实现,得学这些一下,对照着实现!Java的语法是知道的,但是忽然间写这个,还是有点不习惯的!

知识补充
Map接口具有哪些具体的实现对象?有什么区别?

  • HashMap

    • 基于哈希表实现,允许null的键
    • 插入时间复杂度是O(1),适用于需要快速访问元素时的操作
    • 非线程安全
  • LinkedHashMap

    • 继承HashMap,底层是用双向链表维护节点
    • 时间复杂度是O(1),适用于需要按照插入顺序或者访问顺序遍历元素使用。
  • TreeMap

    • 基于红黑树实现,按key的自然顺序或者提供的比较器进行排序,线程不安全
    • O(log N),按照键的顺序访问元素使用
  • ConcurrentHashMap

    • 线程安全,使用分段锁机制提高并发性能
    • 多线程环境下,比Hashtable好用

Java中如何表示空指针

  • null不是None
  • 有啥区别?
    *
    好吧,东西太多了,记混了,以后就用Java和python了,类的声明方法也是的,用的太多了,就混了

使用HashMap实现的相关方法

  • 如何插入对应的值?
 // 创建一个HashMapHashMap<Integer, String> hashMap = new HashMap<>();// 插入键值对hashMap.put(1, "Value1");hashMap.put(2, "Value2");hashMap.put(3, "Value3");
  • 如何删除对应的值?
// 删除键值对String removedValue = hashMap.remove(2);
  • 如何判定对应的值是否存在?
// 判定键是否存在
boolean containsKey2 = hashMap.containsKey(2);
boolean containsKey4 = hashMap.containsKey(4);

具体实现

class LRUCache {class Node{    int key,val;Node right,left;public Node(int _key,int _val){key = _key;val = _val;right = null;   // how to represent nulll pointer in Javaleft = null;}}Map<Integer,Node> dict;Node L,R;int capacity;public LRUCache(int capacity) {this.capacity = capacity;this.L = new Node(-1,-1);this.R = new Node(-1,-1);dict = new HashMap<>();L.right = R;R.left = L;}public void remove(Node temp){// remove the temp from the listtemp.left.right = temp.right;temp.right.left = temp.left;}public void insert(Node temp){// insert the temp to the firsttemp.right = L.right;temp.left = L;L.right.left = temp;L.right = temp;}public int get(int key) {// judge whether the key existsif(!dict.containsKey(key))  return -1;// refresh the key and return the valueNode temp = dict.get(key);remove(temp);insert(temp);return temp.val;}public void put(int key, int value) {// judge whether the key-value existsif(dict.containsKey(key)){// update the key-value Node temp = dict.get(key);temp.val = value;remove(temp);insert(temp);return ;}// insert the key-value into cacheNode temp = new Node(key,value);dict.put(key,temp);insert(temp);// judge  whether the cache is fullif(dict.size() > capacity){Node toRemove = R.left;// remove(R.left);remove(toRemove);// dict.remove(R.left.key);dict.remove(toRemove.key);}}
}/*** Your LRUCache object will be instantiated and called as such:* LRUCache obj = new LRUCache(capacity);* int param_1 = obj.get(key);* obj.put(key,value);*/

在这里插入图片描述
最后这里真的是蠢死了,我没有发现他居然是已经删除了节点,R.left已经发生了变化,弄了半天!

总结

  • 以后都用Java了,一方面是复习语法特性,另外一方面,Java的语法写起来,确实比C++好用太多了,还是用Java吧!

Java实现——搜索插入位置

  • 这道题做了一遍,这一次单纯是使用java重新刷一下
  • 第一次学习链接
  • 单纯就是一个二分搜索的模版题
java实现

如何对Java中的数组,获取长度

  • 使用length,不是方法

具体实现

class Solution {public int searchInsert(int[] nums, int target) {int l = 0,r = nums.length - 1,mid = 0;while(l <= r){mid = (l + r) >> 1;if(nums[mid] < target)  l = mid + 1;else if(nums[mid] > target) r = mid - 1;else return mid;}return l;}
}
知识补充

C++中vector,对应Java中的什么?

import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args) {List<Integer> a = new ArrayList();a.add(1);a.add(2);a.add(3);a.add(4);a.add(5);System.out.println(a.get(3));System.out.println(a.size());for(int x : a)System.out.println(x);System.out.println("Hello world!");}
}

其他实现
在这里插入图片描述

C++中的priority_queue对应Java中的什么?

import java.util.PriorityQueue;
import java.util.Comparator;public class Main {public static void main(String[] args) {PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());pq.add(1);pq.add(2);pq.add(3);while(!pq.isEmpty()){System.out.println(pq.poll());}}
}
  • 这里是判定是否为空是isEmpty,不是empty两个方法
  • poll是会返回队列头的元素,然后在弹出,和pop不一样

新作

搜索二维矩阵

题目链接
在这里插入图片描述
在这里插入图片描述
注意

  • 矩阵从左到右是严格递增的,所以不存在相等的情况
  • 每一行开头的元素都是大于上一行最后一个元素
  • 返回在列表中能否找到对应的元素
个人实现
  • 这道题就是一个两次二分查找,现在第一行进行二分查找,然后在在当前行中进行二分查找,不过我可能对Java中的二维数组操作不是很习惯!

具体实现代码如下

class Solution {public boolean searchMatrix(int[][] mat, int tar) {// find the lineint m = mat.length,n = mat[0].length;int up = 0 , down = mat.length - 1,midRow = 0;while(up < down){midRow = (up + down ) >> 1;if(mat[midRow][0] < tar)    up = midRow + 1;else if(mat[midRow][0] > tar)  down = midRow - 1;else return true;}// judge the mid conditionif(up - 1 >= 0 && mat[up - 1][n - 1] >= tar && mat[up -1][0] <= tar  )   up --;else if (up + 1 < m - 1 && mat[up + 1][n - 1] >= tar && mat[up + 1][0] <= tar )  up ++;// find the colint l = 0,r = mat[0].length - 1,midCol = 0;while(l <= r){midCol = (l + r) >>1 ;if(mat[up][midCol] > tar) r = midCol - 1;else if(mat[up][midCol] < tar) l = midCol + 1;else return true;  }if(mat[up][midCol] == tar)  return true;return false;}
}

写是写完了,但是有点小问题

  • 第一个判定索引那里,会出现异常情况,这里还是看一下其他的怎么求的吧!
  • 这里是将整个二维矩阵逐行进行拼接,将二维矩阵转成一维矩阵,然后根据一维有序数组,使用二分查找目标值。
  • 这里专门提到了二分模板,这里也贴一下,自己老是对边界值有误解
参考实现

二分查找的模板

  • 有x找到x,否则找到一个最接近x,并且比x大的数字
    • l == r的时候退出循环
    • l是最终的目标值,返回的是最接近x并且第一个比x大的数字
int l = 1,r = n;
while(l < r){int mid = (l + r) >>1;if(a[mid] >= x)	r = mid;else l = mid + 1;
}
  • 有x找到x,否则找到第一个最接近x,并且比x小的数字
    • 具体条件同上
int l = 1,r = n;
while(l < r){int mid = (l + r) >>1;if(a[mid] <= x)	l = mid;else r = mid - 1;
}
  • 这里背诵的话,基本上是通过的返回条件的要求确定,返回的第一个大于他的数字,就是符号就是大于等于,小于即使小于等于。

左加大,右减小

数组坐标转换

  • 行数 = index / 一行多少个元素
  • 列数 = index % 一行多少个元素

参考实现代码

class Solution {public boolean searchMatrix(int[][] mat, int tar) {//  jedge the edge conditionif(mat.length == 0 || mat[0].length == 0)  return false;// convert the idxint m = mat.length,n = mat[0].length;int l = 0,r = m * n -1;while(l < r){int mid = (l +r) >> 1;if(mat[mid / n][mid % n] >= tar)   r = mid;else l = mid  + 1; }return mat[l / n][l % n] == tar;}
}
  • 这个模板还是挺好记的,继续加油吧!

总结

  • 今天搞得太晚了,已经一点钟了,再不睡,明天又没有精神,不行的!今天主要是加班搞定了MySQL中的索引,明天早上在起来 背背对应的八股,应该就够了。
  • 后续再看需要什么,在补充什么,加油,尽快把简历还有项目弄完!

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

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

相关文章

如何在 Microsoft Edge 上使用开发人员工具

Microsoft Edge 提供了一套强大的开发人员工具&#xff0c;可帮助 Web 开发人员检查、调试和优化他们的网站或 Web 应用程序。 无论您是经验丰富的 Web 开发人员还是刚刚起步&#xff0c;了解如何有效地使用这些工具都可以对开发过程产生重大影响。 在本文中&#xff0c;我们…

Java版Flink使用指南——分流导出

大纲 新建工程编码Pom.xml自定义无界流分流 测试工程代码 在之前的案例中&#xff0c;我们一直使用的是单个Sink来做数据的输出。实际上&#xff0c;Flink是支持多个输出流的。本文我们就来讲解如何在Flink数据输出时做分流处理。 我们将基于《Java版Flink使用指南——自定义无…

【目标检测】使用自己的数据集训练并预测yolov8模型

1、下载yolov8的官方代码 地址&#xff1a; GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX > OpenVINO > CoreML > TFLite 2、下载目标检测的训练权重 yolov8n.pt 将 yolov8n.pt 放在ultralytics文件夹下 3、数据集分布 注…

国际网课平台Udemy上的亚马逊云科技AWS免费高分课程和创建、维护EC2动手实践

亚马逊云科技(AWS)是全球云行业最&#x1f525;火的云平台&#xff0c;在全球经济形势不好的大背景下&#xff0c;通过网课学习亚马逊云科技AWS基础备考亚马逊云科技AWS证书&#xff0c;对于找工作或者无背景转行做AWS帮助巨大。欢迎大家关注小李哥&#xff0c;及时了解世界最前…

文件操作和IO流(Java版)

前言 我们无时无刻不在操作文件。可以说&#xff0c;我们在电脑上能看到的图片、视频、音频、文档都是一个又一个的文件&#xff0c;我们需要从文件中读取我们需要的数据&#xff0c;将数据运算后也需要将结果写入文件中长期保存。可见文件的重要性&#xff0c;今天我们就来简…

分布式锁(仅供自己参考)

分布式锁&#xff1a;满足分布式系统或集群式下多进程可见并且互斥的锁&#xff08;使用外部的锁&#xff0c;因为如果是集群部署&#xff0c;每台服务器都有一个对应的tomcat&#xff0c;则每个tomcat的jvm就不同&#xff0c;锁对象就不同&#xff08;加锁的机制&#xff0c;每…

独立开发者系列(23)——Linux掌握小结

只要开发系统&#xff0c;就绕不开使用Linux服务器 &#xff0c;而Linux除了使用BT面板进行初级管理&#xff0c;很多稍微高级点的管理&#xff0c;还是需要命令行进行的。这里总结在不需要精通的情况下&#xff0c;掌握常见命令和环境的相关配置。 &#xff08;1&#xff09…

HI3559AV100四路IMX334非融合拼接8K视频记录

下班无事&#xff0c;写篇博客记录海思hi3559av100四路4K视频采集拼接输出8K视频Demo 一、准备工作&#xff1a; 软件&#xff1a;Win11系统、VMware虚拟机Ubuntu14、Hitool、Xshell等 硬件&#xff1a;HI3559AV100开发板4路imx334摄像头、串口线、电源等 附硬件图&#xff1…

来一场栈的大模拟(主要是单调栈)

一.栈模拟 二.单调栈求最大矩形面积 通常&#xff0c;直方图用于表示离散分布&#xff0c;例如&#xff0c;文本中字符的频率。 现在&#xff0c;请你计算在公共基线处对齐的直方图中最大矩形的面积。 图例右图显示了所描绘直方图的最大对齐矩形。 输入格式 输入包含几个测…

哪里有主机游戏店收费系统,佳易王电玩ps5ps4计时计费系统操作教程

哪里有主机游戏店收费系统&#xff0c;佳易王电玩ps5ps4计时计费系统操作教程 以下软件操作教程以&#xff0c;佳易王计时计费管理系统为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件程序图文讲解 1、主机游戏计时软件、电玩店计费软…

HumanoidBench——模拟仿人机器人算法有未来

概述 论文地址&#xff1a;https://arxiv.org/pdf/2403.10506 仿人机器人具有类似人类的外形&#xff0c;有望在各种环境和任务中为人类提供支持。然而&#xff0c;昂贵且易碎的硬件是这项研究面临的挑战。因此&#xff0c;本研究开发了使用先进模拟技术的 HumanoidBench。该基…

GTK是如何加密WLAN组播和广播数据的?

1. References WLAN 4-Way Handshake如何生成GTK&#xff1f;_tk bigtk gtk igtk-CSDN博客 2. 概述 在Wi-Fi网络中&#xff0c;单播、组播和广播帧的加密算法是由AP决定的。其中组播帧和广播帧的加密使用GTK密钥&#xff0c;其PTK的密钥结构如下图所示&#xff1a; GTK的组成…

2024 Q3 NAND闪存价格|企业级依然猛涨,消费级放缓

在企业领域持续投资于服务器基础设施&#xff0c;特别是在人工智能应用的推动下&#xff0c;企业级SSD需求增加的同时&#xff0c;消费电子市场却依旧疲软。加之NAND供应商在2024年下半年积极扩大生产&#xff0c;预计到2024年第三季度&#xff0c;NAND闪存供应充足率将上升至2…

“郑商企航”暑期社会实践赴美丽美艳直播基地开展调研

马常旭文化传媒网讯&#xff08;记者张明辉报道&#xff09;导读&#xff1a;2024 年 7 月 3 日&#xff0c;商学院暑期社会实践团“郑商企航”在河南省郑州市新密市岳村镇美丽美艳直播基地&#xff0c;展开了一场意义非凡的考察活动&#xff0c;团队成员深度调研了直播基地的产…

【系统架构设计】计算机组成与体系结构(二)

计算机组成与体系结构 计算机系统组成存储器系统前言主存储器存储器存储数量&#xff08;计算&#xff09; 辅助存储器&#xff08;以磁盘为例&#xff09;Cache存储器 流水线 计算机系统组成 存储器系统 前言 存储器用来存放程序和数据的部件&#xff0c;是一个记忆装置&am…

【自动驾驶/机器人面试C++八股精选】专栏介绍

目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步&#xff0c;自动驾驶和机器人的技术水平不断提升&#xff0c;使得它们更加智能、可…

fatal error: napi.h: No such file or directory

使用Cmake-js构建基于node-addon-api的C扩展 基于node-addon官方的eample改造测试&#xff1a;https://github.com/nodejs/node-addon-examples Cmake-js的github给了一个例子&#xff0c;但是是基于NAN的&#xff0c;而不是node-addon-api&#xff1a;https://github.com/cma…

如何压缩视频大小不改变画质,视频太大怎么压缩变小

在现代生活中&#xff0c;视频已经成为我们记录生活、分享快乐的重要工具。但随之而来的问题就是视频文件体积过大&#xff0c;不仅占用大量存储空间&#xff0c;还难以在社交平台上快速分享。别担心&#xff0c;下面我就来教大家几种简单有效的方法&#xff0c;让视频文件轻松…

回溯算法-以医院信息管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法&#xff0c;它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤&#xff1a; 1、 针对所给问题&#xff0c;定义问题的解空间&#xff0c;它至少包含问题的一个&#xff08;最优&#xff09;解。 2 、确定易于搜…

移除元素的讲解,看这篇就够了!

一&#xff1a;题目 博主本文将用指向来形象的表示下标位的移动。 二&#xff1a;思路 1&#xff1a;两个整形&#xff0c;一个start&#xff0c;一个end&#xff0c;在一开始都 0&#xff0c;即这里都指向第一个元素。 2&#xff1a;在查到val之前&#xff0c;查一个&…