首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏学习

    【优选算法9----长度最小的子数组

    题目解析: 重点:在学习滑动窗口这一类算法题前,我们需要了解一个概念:“滑动窗口”是什么? 我们来用寻宝藏来设想一下: 滑动窗口就像是一个会自动调整大小的“魔法窗口”,在数组上滑动,寻找宝藏。 讲解算法原理: 方法一:暴力解法:简单粗暴的大搜索 这题的解题思路就像是找宝藏,一开始咱两眼一抹黑,不知道宝藏在哪,那就得从最开始的地方一 点点摸索。 暴力解法很直接,就是把所有可能的子数组都找出来,计算它们的和,看看哪个子数组的和大于等 于 target ,然后找出其中长度最小的。 这样不断地滑动窗口,就能找到满足条件的最 小子数组长度啦。 0:len; } }; ​ ​ 这道长度最小的子数组题目,通过暴力解法和滑动窗口两种思路的对比,让我们看到了算法优化的 魅力。暴力解法虽然简单易懂,但在效率上输给了滑动窗口。

    23310编辑于 2025-01-25
  • 来自专栏AI科技时讯

    算法数组

    数组的定义 在这里插入图片描述 数组的存储 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 数组问题,如果想快的话 要是排序数组,使用双指针,二分查找法,哈希表法等 例题 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 一样可以使用双指针算法进行解决,可以知道重复元素是挨着出现的,定义两个指针进行遍历 class Solution: def removeElement(self, nums: List[int] } } return ans; } }; References [1] 原地: http://baike.baidu.com/item/原地算法

    46220编辑于 2022-03-15
  • 来自专栏怀英的自我修炼

    怀英漫谈9 - JS 数组

    你好,这一周,我们来聊聊JS的数组。 所谓的数组,就是一些数据的集合,JS中没有集合的概念,所以集合也是数组的一种。 在数组的这些个方法中,我们先来说说“查”这个方法,在开发中最常遇到的需求是,知道一个数组的元素,但我想知道这个元素在这个数组中的位置。 除了这些常用的方法之外,其它的还有一些增强型的方法,比如数组排序,数组合并等,我列在下面,如有兴趣,可以去w3c上瞅一眼。 向数组结尾后面添加新的元素 arr.unshift(ele1,ele2…) 向数组开始前面添加新的元素 arr.shift() 从数组中取出该数组的第一个元素 arr.pop() 从数组中取出该数组的最后一个元素 …) 合并数组 arr.join(separator) 数组通过separator(分隔符)连接把数组转换为字符串

    94930发布于 2018-07-26
  • 来自专栏python库介绍

    Python库介绍9 访问数组

    访问数组元素允许直接读取或修改存储在数组中的数据,这对于后续的任务至关重要【一维数组索引访问】访问numpy的一维数组元素跟list是类似的使用 方括号 + 数字索引从左往右索引数字依次为0,1,2,3,4 ,…如果是从右往左,索引数组依次为-1,-2,-3,-4,…import numpy as npa=np.arange(1,7)print(a)print(a[0],a[1],a[2],a[3],a[4 ],a[5])print(a[-1],a[-2],a[-3],a[-4],a[-5],a[-6])【多维数组索引访问】多维数组索引有两种表达式:表达式1:np.array[0轴索引][1轴索引]…[n- ]两种写法都成立import numpy as npa=np.arange(1,7).reshape(3,2)print(a)print(a[2][1])print(a[2,1])除了正数索引外,多维数组也能使用负数索引

    32910编辑于 2024-05-12
  • 来自专栏Devops专栏

    9. Go复合类型-数组

    9. Go复合类型-数组 前言 前面我们已经学习了一些简单的基本类型,现在学习复合类型,复合类型主要包括了数组,指针,切片,结构体等。 ,a[9] 对数组赋值的第一种方法: ? 如果现在给a[10]=29, 会出现什么情况呢? ? =9 a[10]=10 通过for循环完成数组的赋值与输出。 a[9]=10 i 变量存储的是数组的下标,data变量存储的是数组中的值。 : ", num) } 执行如下: 冒泡排序前的数组: [9 8 7 6 5 4 3 2 1 0] 冒泡排序后的数组: [4 5 6 7 8 9 3 2 1 0] 1.6 数组作为函数参数 数组也可以像变量一样

    77830发布于 2021-07-29
  • 来自专栏魂祭心

    amt 数组算法

    数组形态就表现在叶子上,把整个叶子节点按顺序拼在一起就是amt数组。不存在数据的索引节点会裁减掉,节省所需的数据空间。 ? = nil { return err } if addVal { r.Count++ } 查找数据 添加数据时候,首先通过高度确定最后一层的数量,在通过数组索引需要确定第一层的索引节点,

    61120发布于 2020-07-06
  • 来自专栏Java 学习日记

    Java 数组数组常用算法

    6 数组常用方法 6.1 插入算法   一个数组有序,添加一个元素后,数组依然有序。 int[] arr = {1,3,7,9,12,20,0}; int t = 0; // 【1】找位置 int loc = -1; // 表示t应该添加到的位置 for(int i = t; } // 验证 for(int i = 0;i<arr.length;i++){ System.out.print(arr[i]+"\t"); } } } 6.2 删除算法 删除算法 int[] arr = {1,3,7,9,12,20}; int t = 1; // 【1】找位置 int loc = -1; for(int i=0;i<arr.length public class Test10{ public static void main(String[] args){ // 对一个无序的数组进行排序 int[] arr = {10,5,3,4,2,9,7

    1.4K20发布于 2019-08-19
  • 来自专栏大数据和云计算技术

    算法基础9:散列表

    算法是基础,小蓝同学准备些总结一系列算法分享给大家,这是第9篇《散列表》,非常赞!希望对大家有帮助,大家会喜欢! 前面系列文章: 归并排序 #算法基础#选择和插入排序 由快速排序到分治思想 算法基础:优先队列 二分查找 二叉树查找 平衡查找树概述 平衡树之红黑树 散列表是我们比较简单的一种查找算法,是用这种建议方法的扩展并能够处理更加复杂的类型的键 我们可以通过算数操作将键转化为数组的索引来访问数组中的键值对。 使用散列表的查找算法分为两步 第一步用散列函数将被查找的键转化为数组的一个索引。 等价键必然产生相等的散列值 2)高效性 --计算简便 3)均匀性 -- 均匀的散列所有的键 二、处理碰撞冲突 基于拉链法来处理碰撞问题,也就是处理两个键或多个键的散列值相同的情况,拉链法指的是将大小为Md数组中的每一个元素指向一条链表 三、应用 散列表的应用是使用最广泛的算法之一 信息安全领域: Hash算法 可用作加密算法

    86120发布于 2018-07-26
  • 来自专栏乐行僧的博客

    9-选择排序算法

    思想: 依次遍历数组的每一个元素,在该元素之后寻找一个比其小/大的一个最小值/最大值,记录下标。退出循环时进行交换。 注意点: 不稳定的排序算法 代码: #include <stdio.h> typedef int bool; #define true 1 #define false 0 void swap(int swap(&a[minIndex], &a[i]); } } } int main() { int a[] = {3, 1, 2, 4, 7, 0, 5, 8, 6, 9}

    14840编辑于 2022-02-25
  • 来自专栏生如夏花绚烂

    Java数组常用算法

    数组反转 String[] arr = new String[]{"a","b","c"}; for(int i = 0 ;i < arr.length;i++){ String tem = arr[i])){ System.out.print("找到指定元素,位置为"+i); break; } } 二分法查找 前提:数组必须有序 int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10}; //线性查找 int num = 2; int start = int[] arr = new int[]{1,2,3,4,5,6,7,8,9,10}; for(int i = 0; i<arr.length-1;i++){

    50510编辑于 2022-09-14
  • 来自专栏AI科技时讯

    算法-数组-移动零

    283.移动零 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/move-zeroes 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 解法 统计非0的个数:遍历一遍,统计非0元素的个数,并将非0元素往左拉;从后面开始遍历第二遍,基于长度差将末尾元素设置为0 新建数组:新建全0元素,并将非0元素在前面赋值 双指针:双指针,用j表示非0元素的位置 ,用下标i遍历数组,如果发现i下的元素非0,就将该元素赋值给j,如果i与j不相等,表明发生了挪动,此时需要将i处的元素设置为0;j++操作 代码实现 方法1 统计非0的个数 python实现 class ,非0元素放入,0元素放末尾, 方法不行,因为需要在不复制数组情况下进行原地处理 n = len(nums) new_nums = [0] * n j =

    1.1K30编辑于 2022-06-10
  • 来自专栏浪淘沙

    关于数组算法

    1.将一个正方形数组顺时针旋转90°。 args) { // TODO Auto-generated method stub int[][] arr= new int[][] { {1,2,3,4,5}, {6,7,8,9,10 num,把小于num的书放在数组左边,大于num的书放在数组右边 package algorithm; /**  * 给定一个数组,和一个数num,把小于num的书放在数组左边,大于num的书放在数组右边 / TODO Auto-generated method stub int temp = a[l]; a[l] = a[cur]; a[cur] = temp; } } 4.使用归并算法求小和问题 即求左边比右边元素小的所有元素之和 package algorithm; /** * 使用归并算法求小和问题 * @author hasee * */ public class smallSum

    58960发布于 2018-10-18
  • 来自专栏猫咪-9527

    前缀和数组算法

    of range [2, 4]: " << sum << endl; // 输出 9 (2+3+4) return 0; } 3.二维数组求前缀和 二维数组求前缀和和一维数组求前缀和思路相似 因此我们 接下来仅需完成两步即可: 1 2 3 4 5 6 7 8 9 0 0 0 0 0 1 2 3 0 4 5 6 0 7 8 9 for(int i = 1; i <= n; i++) for 中心坐标[x,y]的宽k=1中心前缀和,为以下蓝色部分 x y 1 2 3 4 5 6 7 8 9 坐标[x,y]的中心前缀和,为以下蓝色部分 x 1 2 3 y 4 5 6 7 8 9 此时步骤为: 1.先求普通二维前缀和dp,建立首行列都为0的普通前缀和数组 x i 0 0 0 0 j 0 1 3 6 0 5 12 21 y 0 12 27 55 2.求建立新的中心前缀和数组即为 -dp[x2][y1-1]; } } return arr; } }; 5.前缀和与哈希表相结合 前缀和与哈希表相结合是一种非常有效的算法技巧

    40910编辑于 2025-01-13
  • 来自专栏颇忒脱的技术博客

    算法 - 数组和链表

    原文 极客时间 - 数据结构与算法之美 - 05 | 数组 极客时间 - 数据结构与算法之美 - 06 | 链表(上) 极客时间 - 数据结构与算法之美 - 07 | 链表(下) 数组 数组(Array 随机访问高效,O(1),见下面一维数组内存寻址公式。 插入和删除低效,O(n),需要移动后面的元素。 删除优化策略,标记删除,直到无空间可用时再做删除。 一维数组内存寻址公式: 对于二维数组 a[n] a[i]_addr = base_addr + i * type_size 二维数组内存寻址公式: 对于二维数组 a[m][n] a[i][j]_addr = base_addr + (i * n + j) * type_size 三维数组内存寻址公式: 对于三维数组 a[m][n][p] a[i][j][k]_addr = base_addr + (i * n * p + j * p + k) * type_size 关于多维数组在内存中的布局参考这篇文章:Memory Layout of Multi-Dimensional Arrays 链表 通过

    85930发布于 2019-03-13
  • 来自专栏全栈程序员必看

    算法–切割的数组

    标题来源:编程之美2.18 有一个无序的,元素个数为2n的正整数的数组,要求: 怎样能把这个数组切割为元素个数为n的两个数组,使得两个子数组的和尽量接近。 解析:由于两个子数组的和是一定的,等于整个数组的和。如今要求使得两个字数组的和尽量的接近,也就意味着要从当中选出n个数使得这n个数的和尽可能的接近sum/2,最好还是设为从小于sum/2的方向接近。 上述print部分是在打印当中的一个子数组。返回的是终于的两个数组的最小的差值。 时间复杂度为: O(N*N*sum) 拓展:假设上述代码仅仅是要求计算终于的差值,而不须要打印出结果数组的话。

    47520编辑于 2022-07-06
  • 来自专栏OBKoro1的前端分享

    算法-奇偶分割数组

    奇偶分割数组 难度:简单 描述: 分割一个整数数组,使得奇数在前偶数在后。 样例: 给定 [1, 2, 3, 4],返回 [1, 3, 2, 4]。 增加一下难度: 给定乱序数组:[2, 5, 1, 6, 3, 4],返回[1, 3, 5, 2, 4, 6] 思路分析: 排序好的数组:找到奇数进行操作。 乱序的数组:使用sort方法进行排序+提取奇数 代码模板: js const partitionArray = arr => {};¨G0Gjs const partitionArray = arr = > { let num = arr.length - 1; // 其实如果是乱序数组,可以在这里使用sort将数组排序好再走下面那部分也可以 // 倒序遍历 for (let i = num;

    82620发布于 2020-10-27
  • 来自专栏藏经阁

    算法基础】数组反转

    问题描述 问题: 将数组[1,2,3,4,5,6,7,8,9]反转为[9,8,7,6,5,4,3,2,1] 实现思路: 数组对称位置的元素互换。 arr[arr.length-1-i];//arr[0]=8 // 交换值的位置 arr[arr.length-1-i] = temp;//arr[7]=0 } //输出: 9,8,7,6,5,4,3,2,1 } 方案2:新建数组 + 首尾交换赋值 思路: 创建一个新数组,将原数组尾部的值赋值给新数组首部,再将新数组复制到原数组 public static void main(String[] args ,arr2会被垃圾回收器回收 arr = arr2; //输出:9,8,7,6,5,4,3,2,1 } } 方案3:新建数组 + 首索引、尾索引。 ,arr2会被垃圾回收器回收 arr = arr2; //输出:9,8,7,6,5,4,3,2,1 }

    66020编辑于 2023-03-04
  • 来自专栏算法工程师之路

    每日算法题:Day 9

    作者:TeddyZhang,公众号:算法工程师之路 Day 9, Python知识点走起~ 1 编程题 【剑指Offer】树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构。 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9} 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 思路: 这个使用递归的思路就很简单,一般二叉树用递归的方法很多,比如二叉树的遍历也可以使用递归的方法。 struct TreeNode *right; 6 TreeNode(int x) : 7 val(x), left(NULL), right(NULL) { 8 } 9}

    45720发布于 2019-08-13
  • 来自专栏Unity3D

    ☆打卡算法☆LeetCode 9、判断回文数 算法解析

    一、题目 1、算法题目 “判断给定的整数是否是一个回文数。”

    54140编辑于 2022-08-07
  • 来自专栏惊羽-布壳儿

    算法练习(9) - TwoSum问题变换

    题目 有一个数组[1,2,5,7,8,8,9,4,4,6],求元素 m+n = 12 的组合,将所有的 m n 组合下标打印出来,需要过滤下标重复的组合,例如 4,7 7,4 是重复组合;时间复杂度需要是 public class TwoSumTest { @Test public void twoSum_test() { int[] arr = {1,2,5,7,8,8,9,4,4,6

    22410编辑于 2022-06-15
领券