代码随想录打卡Day1
文章目录
- day01
- 1 数组理论基础
- 2 二分查找法
- 3 移除元素
- 4 平方数
day01
Java JDK是17.0.11
1 数组理论基础
数组是存放在连续内存空间上的相同类型数据的集合。
数组下标都是从0开始的。
数组内存空间的地址是连续的。
因为数组在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。
例如删除下标为3的元素,需要对下标为3的元素后面的所有元素都要做移动操作。
数组的元素是不能删的,只能覆盖。
Java:二维数组在内存中不是连续的,每个子数组是独立的对象。
Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。
所以看不到每个元素的地址情况
public class FundamentalsTheory {public static void main(String[] args) {testArr();}public static void testArr(){//初始化二维数组int[][] arr=new int[2][3];arr[0]=new int[]{1,2,3};arr[1]=new int[]{4,5,6};//输出地址for(int i=0;i< arr.length;i++){System.out.println("Subarray " + i + ": " + System.identityHashCode(arr[i]));for(int j=0;j<arr[i].length;j++){System.out.println(System.identityHashCode(arr[i][j])+" ");}System.out.println();}}
}
Subarray 0: 1324119927
1607521710
363771819
2065951873 Subarray 1: 1791741888
1595428806
1072408673
1531448569
Java:二维数组在内存中不是连续的,每个子数组是独立的对象。
2 二分查找法
区间定义,一般是左闭右闭,左闭右开。
左闭右闭
力扣题目链接
package com.jiangxun.array;/*** @author jiangxun*/public class BinarySearch {/*** leetcode27* 左闭右闭* while(left<=right) 小于等于 当 left=right [1,1] 区间合法。 mid=left+(right-left)/2。target是我们的目标值* if(nums[mid] > target),nums[mid]不等于target,我的搜索区间包含right,而nums[mid]确定不是target,right = mid-1。* if(nums[mid] < target),nums[mid]不等于target,我的搜索区间包含left,而nums[mid]确定不是target,left = mid+1。* if(nums[mid] = target)返回mid。否则返回-1;* 左闭右开* 注意right=nums.length* while(left < right) 小于 当 left=right [1,1) 区间不合法。mid=left+(right-left)/2。target是我们的目标值* if(nums[mid] > target),nums[mid]不等于target,我的搜索区间不包含right,right = mid。* if(nums[mid] < target),nums[mid]不等于target,我的搜索区间包含left,所以left = mid+1。*/public static void main(String[] args) {int[] nums = {1, 2, 3, 4, 5};int target1 = 3;int target2 = 4;int result1 = search1(nums, target1);int result2 = search2(nums, target2);System.out.println("Index of " + target1 + " is: " + result1);System.out.println("Index of " + target2 + " is: " + result2);}public static int search1(int[] nums, int target) {int left=0;int right=nums.length-1;while(left<=right){int mid=left+(right-left)/2;if (nums[mid]>target){right=mid-1;}else if(nums[mid]<target){left=mid+1;}else{return mid;}}//没找到return -1;}public static int search2(int[] nums, int target) {int left=0;//注意数组区间个数int right=nums.length;while(left<right){int mid=left+(right-left)/2;if (nums[mid]>target){right=mid;}else if(nums[mid]<target){left=mid+1;}else{return mid;}}//没找到return -1;}
}//时间复杂度:O(log n)
//空间复杂度:O(1)
3 移除元素
力扣题目链接
package com.jiangxun.array;/*** @author jiangxun*/
public class RemoveElement {public static void main(String[] args) {int[] nums = {3, 2, 2, 3};int val = 3;
// int result1 = removeElement1(nums, val);
// System.out.println("New length: " + result1);int result2 = removeElement2(nums, val);System.out.println("New length: " + result2);}/*** leetcode27* 移除数组中值为val的元素,返回 nums 中与 val 不同的元素的数量。* 快指针用来获取新数组中的元素,慢指针用来获取新数组中需要更新的位置* @param nums* @param val* @return*/public static int removeElement1(int[] nums, int val) {int fast=0;int slow=0;while(fast<nums.length){if(nums[fast]!=val){nums[slow]=nums[fast];slow++;}fast++;}return slow;}/*** 双向指针移动 一个指针从左向右移动,另一个指针从右向左移动,如果左指针指向的元素等于val,* 则将右指针指向的元素赋值给左指针指向的元素,右指针向左移动。* @param nums* @param val* @return*/public static int removeElement2(int[] nums, int val) {int left=0;int right=nums.length-1;while(left<=right){if(nums[left]==val){nums[left]=nums[right];right--;}else{left++;}}return left;}}
4 平方数
力扣题目链接
package com.jiangxun.array;import java.util.Arrays;/*** @author jiangxun*/
public class SortedSquares {public static void main(String[] args){int[] nums = {-4,-1,0,3,10};
// int[] result = sortedSquares1(nums);int[] result = sortedSquares2(nums);for (int i : result){System.out.println(i);}}/*** 977 终于碰到简单的题了!* @param nums* @return*/public static int[] sortedSquares1(int[] nums){for (int i = 0; i < nums.length; i++) {nums[i] = nums[i] * nums[i];}Arrays.sort(nums);return nums;}/*** 初始化结果数组 result,长度与输入数组相同。* 使用两个指针 left 和 right 分别指向数组的起始和末尾。* 使用 pos 指向结果数组的末尾。* 在 while 循环中,比较 left 和 right 所指元素的平方值,将较大的平方值放入结果数组的 pos 位置,并移动相应的指针。* 重复上述步骤,直到所有元素都被处理完。* 返回结果数组。* @param nums* @return*/public static int[] sortedSquares2(int[] nums) {int n = nums.length;int[] result = new int[n];int left = 0;int right = n - 1;int pos = n - 1;while (left <= right) {int leftSquare = nums[left] * nums[left];int rightSquare = nums[right] * nums[right];if (leftSquare > rightSquare) {result[pos] = leftSquare;left++;} else {result[pos] = rightSquare;right--;}pos--;}return result;}
}
相关文章:

代码随想录打卡Day1
文章目录 day011 数组理论基础2 二分查找法3 移除元素4 平方数 day01 Java JDK是17.0.11 1 数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 数组下标都是从0开始的。 数组内存空间的地址是连续的。 因为数组在内存空间的地址是连续的,所以我们…...

Vue快速创建工程+Element Plus
创建Vue工程 执行命令 npm init vuelatest 执行这两个绿色的命令 执行这个命令启动 npm run dev Element 打开网站https://element-plus.org/zh-CN/ npm install element-plus --save 然后在vscode中打开你的项目工程 // main.ts import { createApp } from vue import Ele…...

汽车管理系统——主界面制作
目录 主界面需要有什么?然后要做什么?添加两个主菜单(声明)下一步应该干什么?能够跳转到文件有哪几个动作?动作如何声明?为什么用选择声明指针,不选择直接声明这个对象? …...
C++ 右值引用深入理解:特性、优化与底层
目录 一、左右值的概念及右值的种类 二、左值引用与右值引用 左值引用给右值取别名: 右值引用给左值取别名: 三、引用的意义及左值引用的场景 四、移动构造: 右值引用在底层里的实现: 一、左右值的概念及右值的种类 在 C …...
C# 文件操作
文章目录 文件系统FileInfo和DirectoryInfo类完成一个文件的拷贝判断一个文件是否存在FileInfo和DirectoryInfo的属性列表FileInfo和DirectoryInfo的方法列表读写文件文件系统 下面的类用于浏览文件系统和执行操作,比如移动,复制和删除文件。 System.MarshalByRefObject 这个…...

FFmpeg 4.3 音视频-多路H265监控录放C++开发三 :安装QT5.14.2, 并将QT集成 到 VS2019中。
一,安装QT, 重点:在安装QT的时候要安装msvc201x版本的组件, 二 , 安装 qt-vs-tools Index of /development_releases/vsaddin/2.8.1 三,需要安装过 windows10 SDK,一般我们在安装vs2019的时候就…...

Linux 累加计算递归算法汇编实现
1...n可以使用公式计算,同时也是递归实现的很好例子,其c实现代码为 int f(int i) {i && (if(i-1));return i; } 其终止条件为0,此时i && (if(i-1))表达式不成立,不计算if(i-1)直接返回0&…...

明日周刊-第23期
十月已过半,气温也转凉了,大家注意保温哦。冬吃萝卜,夏吃姜,在快要到来的冬季大家可以选择多吃点萝卜。 配图是本周末去商场抓娃娃的时候拍的照片,现在抓娃娃单次普遍都控制在1块钱以下了,还记得多年前的抓…...

kubernets(二)
集群操作 查看集群信息 kubectl get查看各组件信息 格式:kubectl get 资源类型 【资源名】 【选项】 events #查看集群中的所有日志信息 -o wide # 显示资源详细信息,包括节点、地址... -o yaml/json #将当前资源对象输出至 yaml/json 格式文…...
《YOLO 标注工具全览》
《YOLO 标注工具全览》 一、YOLO 标注工具的重要性二、常见的 YOLO 标注工具介绍(一)LabelImg(二)Yolo_Label(三)在线标注工具 Make Sense(四)Ybat - YOLO BBox Annotation Tool&…...

财富思维学习
四大象限: 人类财富创造史经历的五个阶段: 1、黄色(土地)财务阶段:拥有土地和劳动力是财富的要求 2、蓝色(海)财富阶段:谁拥有贸易的通道谁就拥有财富(如港口ÿ…...

python爬虫加解密分析及实现
第一种: 1、找到加密的接口地址,通过加密的接口地址全局搜索 2、通过打断点的方式,操作页面,跑到断点处时,即可找到加密串,如图二; 3、找到用的是哪种加密方式,如: cr…...

用Java做智能客服,基于私有知识库
构建Java智能客服系统的整体思路 使用Java构建智能客服系统的整体思路是: 首先将客服QA文档以Word形式导入到系统中,通过向量化处理存入知识库。 当用户提出问题时,系统会根据问题内容从知识库中检索相关的上下文信息,并结合大…...

软考(网工)——网络安全
文章目录 🕐网络安全基础1️⃣网络安全威胁类型2️⃣网络攻击类型 🕑现代加密技术1️⃣私钥密码/对称密码体制2️⃣对称加密算法总结3️⃣公钥密码/非对称密码4️⃣混合密码5️⃣国产加密算法 - SM 系列6️⃣认证7️⃣基于公钥的认证 🕒Hash …...

如何给手机换ip地址
在当今数字化时代,IP地址作为设备在网络中的唯一标识,扮演着举足轻重的角色。然而,有时出于隐私保护、网络访问需求或其他特定原因,我们可能需要更改手机的IP地址。本文将详细介绍几种实用的方法,帮助您轻松实现手机IP…...
kafkamanager安装
一.下载kafkamanager2.0 https://download.csdn.net/download/cyw8998/89892482 二.修改配置文件 解压缩 unzip kafka-manager-2.0.0.0.zip vim application.conf /opt/module/kafka-manager-2.0.0.0/conf/application.conf 添加以下内容:(连接zooke…...
笔记本电脑U口保护分享
在前司时候,经常遇到各种硬件类的问题,但是之前没时间分享,现在来给大家分享一下,常见的问题及如何保护。 1.接口接触不良。这个一般发生于使用时间长了,可以用细砂纸,轻轻摩擦后再进行尝试。 2.接口失灵…...

OpenCV高级图形用户界面(20)更改窗口的标题函数setWindowTitle()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在OpenCV中,cv::setWindowTitle函数用于更改窗口的标题。这使得您可以在程序运行时动态地更改窗口的标题文本。 函数原型 void cv::…...
结构体指针的初始化以及结构体变量作为函数实参传递时易混淆的知识点
结构体指针初始化以及结构体变量作为函数实参传递时易混淆的知识点 首先要明确,结构体类型是用户自己定义的一种数据类型,其本质上与int, char等标准数据类型是一致的 **1.**因此,在进行结构体指针的初始化时,应该这样写&#x…...

Github 2024-10-20 php开源项目日报Top10
根据Github Trendings的统计,今日(2024-10-20统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量PHP项目10Blade项目1Laravel:表达力和优雅的 Web 应用程序框架 创建周期:4631 天开发语言:PHP, BladeStar数量:75969 个Fork数量:24281 次…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...