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

网站的图文链接怎么做的河北网络推广技术

网站的图文链接怎么做的,河北网络推广技术,四川省住房和建设厅网站,商务网站建设的必备功能数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合,可以方便的通过下标索引的方式获取到下标下对应的数据。 1.数组下标都是从0开始的。 2.数组内存空间的地址是连续的。 正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添…

数组理论基础

数组是存放在连续内存空间上的相同类型数据的集合,可以方便的通过下标索引的方式获取到下标下对应的数据。

1.数组下标都是从0开始的。

2.数组内存空间的地址是连续的。

正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址所以数组的元素是不能删的,只能覆盖。

在C++中二维数组在内存的空间地址是连续,但在java中并不是连续的。

java中的数组排列方式如下,所以Java的二维数组在内存中不是 3*4 的连续地址空间,而是四条连续的地址空间组成!

算法题

Leetcode 704.二分查找

题目链接:二分查找

大佬视频讲解:手把手带你撕出正确的二分法

个人思路

题目要求是用二分法;那具体步骤为:找到数组中间的值,将这个值循环与目标值对比,1.若找到目标值放回下标2.没找到目标值的话,则按照与目标值对比的大小,重新选择范围,再选择这个范围中的中间值继续对比;但这其中比较难解决的是范围的确定

解法

这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因此以后遇到此种类型都可以考虑使用二分法;

二分法中,对区间的定义很重要。区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。

二分法第一种写法:左闭右闭

即[left, right];左闭右闭要注意以下两点

  1. 循环while中的判断条件 “(left <= right) ”要使用 <= ,因为left == right是有意义的。
  2. 目标值小于中间值,右区间需要改变时;right 要赋值为 mid - 1,因为当前这个nums[middle]一定不是target。
class Solution {public int search(int[] nums, int target) {int left=0;int right=nums.length-1;//定义target在左闭右闭的区间里,[left, right]if(target <nums[0]||target>nums[right-1]){//避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算return -1;}while(left<=right){int mid=left+((right-left)>>1);//防止溢出;>> 是右移位运算符,相当于除以 2 并向下取整if(nums[mid]==target){return mid;}else if(nums[mid]<target){//target 在右区间,即[mid + 1, right]left=mid+1;}else if(nums[mid]>target){//target 在左区间,即[left, mid- 1]right=mid-1;}}return -1;}
}

时间复杂度:O(log n);(折半循环)

空间复杂度:O(1);(没有使用多余空间)

二分法第二种写法:左闭右开

即[left, right);左闭右开要注意以下两点

  1. 循环while中的判断条件“(left < right)”,这里使用 < ,因为left == right在区间[left, right)是没有意义的
  2. 目标值小于中间值,右区间需要改变时, right 更新为 mid,因为下一个查询区间不会去比较nums[middle]
class Solution {public int search(int[] nums, int target) {int left=0;int right=nums.length;//定义target在左闭右开的区间里,[left, right]if(target <nums[0]||target>nums[right-1]){//避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算return -1;}while(left<right){int mid=left+((right-left)>>1);//防止溢出;>> 是右移位运算符,相当于除以 2 并向下取整if(nums[mid]==target){return mid;}else if(nums[mid]<target){//target 在右区间,即[mid + 1, right)left=mid+1;}else if(nums[mid]>target){//target 在左区间,即[left, mid)right=mid;}}return -1;}
}

时间复杂度:O(log n);(折半循环)

空间复杂度:O(1);(没有使用多余空间)

Leetcode27.移除元素

题目链接:27.移除元素

大佬视频讲解:数组中移除元素并不容易

个人思路

因为数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖,所以若要暴力解决的话,得两次循环,一次循环找与目标值对应的,二次循环将删除元素其后面的元素向前赋值;

这种解法慢,也可以换成双指针来解决,指针分为快慢指针,快指针找需要删除的元素,慢指针找新数组的下标;

解法
暴力解法

双重循环

class Solution {public int removeElement(int[] nums, int val) {int len= nums.length;for (int i = 0; i < len; i++) {if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一位for (int j = i + 1; j < len; j++) {nums[j - 1] = nums[j];}i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位len--; // 此时数组的大小-1}}return len;}
}

时间复杂度:O(n^2);(两个for循环 n*n)

空间复杂度:O(1);(没有使用多余空间)

快慢双指针

搞清楚双指针的定义非常关键,快指针的作用是寻找新数组的元素 ,新数组就是不含有目标元素的数组;慢指针的作用是指向更新 新数组下标的位置

class Solution {public int removeElement(int[] nums, int val) {int slow=0;//慢指针for(int fast=0;fast<nums.length;fast++){if(nums[fast]!=val){//如果没有找到目标元素则一起向前遍历nums[slow]=nums[fast];slow++;}}return slow;}
}

时间复杂度:O( n);(一个for循环)

空间复杂度:O(1);(没有使用多余空间)

以上是个人的思考反思与总结,若只想根据系列题刷,参考卡哥的网址代码随想录算法官网

http://www.tj-hxxt.cn/news/77096.html

相关文章:

  • 网站 注册模块怎么做怎样把自己的产品放到网上销售
  • 设计得好的美食网站广告软文范例
  • 网站要能被搜到需要做推广嘛深圳龙岗区布吉街道
  • 类似于pinterest的设计网站湖南疫情最新情况
  • wordpress滚动条晃动百度搜索引擎优化的养成良好心态
  • 滁州市南谯区规划建设局网站爱站网关键词长尾挖掘
  • 郑州电力高等专科学校专业有哪些优化seo教程
  • wordpress对接微信登录seo资讯
  • 网站制作 意向单企业网站推广外包
  • 招聘网站建设维护人员武汉seo群
  • 业余从事网站开发seo网站结构优化的方法
  • 常见问题 网站建设沈阳网络关键词排名
  • 网站区域名是什么意思二级域名免费分发
  • 如何做网站?深圳百度seo代理
  • 贵州安顺网站建设美发培训职业学校
  • 什么叫手机网站域名申请
  • 免费项目网站如何制作链接推广
  • mac用什么软件做网站免费智能seo收录工具
  • 绍兴网站建设优化百度seo快速提升排名
  • 学校网站建设需求2023第三波疫情已经到来了
  • 哪些网站可以做兼职设计师网络公关
  • 平度做网站看广告收益最高的软件
  • 网站建设需求调查表怎么做推广和宣传平台
  • 创建网站英文做网站的公司有哪些
  • 大连专业手机自适应网站建设维护seo是什么意思新手怎么做seo
  • 济南做网站最好的单位win11优化大师
  • 萧山住房和城乡建设委员会网站搜狗seo刷排名软件
  • 经销做网站都有什么好处阿里指数数据分析平台官网
  • 可以做推广的网站有哪些seo关键词排名优化软件
  • 58企业网站如何做seo的作用主要有