首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【优选算法题练习】day1

移动 1.题目简介 283. 移动 给定一个数组 nums,编写一个函数将所有 0 移动到数组末尾,同时保持非元素相对顺序。...请注意 ,必须在不复制数组情况下原地对数组进行操作。...复写 1.题目简介 1089. 复写 给你一个长度固定整数数组 arr,请你将该数组出现每个都复写一遍,并将其元素向右平移。 注意:请不要在超过该数组长度位置写入元素。...1, cur = 0, n = arr.size();//双指针,找到修改后数组最后一个元素 while(cur < n) { if(arr[cur...2个位置,说明cur判断最后一个元素是0,因为数组空间有限,cur最后遍历到0无法进行复制,因此我们要对这种情况进行修复,即将数组最后一个元素修改为0(直接后移不进行复制)。

11850

双指针算法解决 移动 和 复写问题

一、移动 题目链接:传送门 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组末尾,同时保持非元素相对顺序。 注意要求: 必须在不复制数组情况下原地对数组进行操作。...创建一个"指针"cur,使其指向数组中第一个出现0位置.(如果数组中没有0,则直接返回)....题目链接:传送门 题目描述: 给你一个长度固定整数数组 arr ,请你将该数组出现每个都复写一遍,并将其元素向右平移。...注意要求: 请不要在超过该数组长度位置写入元素。请对输入数组 就地 进行上述修改,不要从函数返回任何东西。...当dest走到最后一个元素时候,结束,此时cur和dest都到达了指定位置. 处理特殊情况: 出界原因: 由于dest可能一次跳2步,很可能从倒数第二个位置+2直接出界,此时需要特殊处理.

14120
您找到你想要的搜索结果了吗?
是的
没有找到

【算法专题】双指针

移动 题目链接 -> Leetcode -283.移动 Leetcode -283.移动 题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组末尾,同时保持非元素相对顺序。...请注意 ,必须在不复制数组情况下原地对数组进行操作。...根据 cur 在扫描过程中,遇到不同情况,分类处理,实现数组划分。在 cur 遍历期间,使 [0, dest] 元素全部都是非元素, [dest + 1, cur - 1] 元素全是。...复写 题目链接 -> Leetcode -1089.复写 Leetcode -1089.复写 题目:给你一个长度固定整数数组 arr ,请你将该数组出现每个都复写一遍,并将其元素向右平移...盛水最多容器 题目链接 -> Leetcode -11.盛最多水容器 Leetcode -11.盛最多水容器 题目:给定一个长度为 n 整数数组 height 。

9110

c语言操作符(上)

除了‘’%‘(取)操作符以外,其它操作符都可以用于浮点型., ’‘%’(取)操作符左右两个操作数必须为整数。返回是整除之后余数。 二、移位操作符 移位操作符作用是什么呢?...其实"位"是指二进制位,所以移位操作符是指移动一个二进制位. 注意:!!! 移位操作符操作数只能是整数。...总结: 数组名一般表示数组元素地址,但有两个情况是例外! 1.sizeof(数组名)——这里数组名表示是整个数组,用于计算整个数组所占空间大小 2....&数组名-----这里数组名表示是整个数组,即这里取是整个数组地址 数组+1: 1.数组地址----以整个数组大小为整体,+1就是跳过整个数组 2.数组元素地址-----数组一个元素地址...,+1就是下一个元素地址 数组传参传数组元素地址----计算地址大小,32位机器是4,64位机器是8 (4)’ ~ ’ (按位取反操作符) 顾名思义,就是将操作数二进制位按位取反.

56720

C语言每日一题(63)复写

题目链接 力扣网 1089 复写 题目描述 给你一个长度固定整数数组 arr ,请你将该数组出现每个都复写一遍,并将其元素向右平移。 注意:请不要在超过该数组长度位置写入元素。...请对输入数组 就地 进行上述修改,不要从函数返回任何东西。...arr = [1,2,3] 输出:[1,2,3] 解释:调用函数后,输入数组将被修改为:[1,2,3] 提示: 1 <= arr.length <= 104 0 <= arr[i] <= 9 思路分析...知识点:双指针 解析: 思路1 按照题目要求直接实现,定义两个指针cur和dest,两个指针从开始,cur用来扫描整个数组。...1.当arr【cur】等于0时,将dest指针移动到cur位置,然后cur加一,从cur位置开始到整个数组结束,元素整体向右移动,最后在cur位置加个0即可。

9610

复写

题目描述 给你一个长度固定整数数组 arr,请你将该数组出现每个都复写一遍,并将其元素向右平移。 注意:请不要在超过该数组长度位置写入元素。...解释:调用函数后,输入数组将被修改为:[1,2,3] 解法 由描述可知,该题目要求在数组每个后添加一个,原数组元素右移一位。...最简单方式自然是遍历数组元素,每遇到一个,将后续所有元素右移一位,填入元素,直至数组末尾。...但是该方式下,一个元素可能存在多次重复移动操作,如果能直接确定每一个元素最终位置,一次将元素移动到最终位置的话,则执行上较为高效。...在遍历数组计算个数时,不一定遍历到数组末尾,因为数组中若存在,则必然有元素被移除数组; 需要注意下,如果最后一个元素的话,需要判断复写该值,是否超出数组边界。

39820

复写

开启我们今天斩妖之旅吧!✈️✈️ 题目: 给你一个长度固定整数数组 arr ,请你将该数组出现每个都复写一遍,并将其元素向右平移。 注意:请不要在超过该数组长度位置写入元素。...虽然这题是让我们在原数组操作,但是我们不妨先开辟一个数组,cur指针指向原数组,dest指针指向新数组,只要cur不为0,dest就复制cur值,如果cur为0,dest就移动两步,且每一步都写为0。...既然我们从左向右双指针不得行,我们可以考虑从右向左来进行复写操作,但是我们要想保证复写正确性,还需要知道正向复写最后一个复写元素,这样才能从后向前复写。   ...而对于原地操作,我们仅仅需要找到cur位置和dest位置就行,所以在找位置情况我们不需要复写,就可以在同一个数组操作了。   ...原来是我们dest指针越界了,在我们复写时候这种情况会在数组外边越界访问了,这种情况是造成原因是最后一个复写元素为0原因。

7410

复写

复写[1] 描述 给你一个长度固定整数数组 arr,请你将该数组出现每个都复写一遍,并将其元素向右平移。 注意:请不要在超过该数组长度位置写入元素。...要求:请对输入数组 就地 进行上述修改,不要从函数返回任何东西。...调用函数后,输入数组将被修改为:[1,2,3] 解题思路 遍历数组,对元素进行判断是否为 0; 若为 0,将当前索引位置后元素整体向后移,超出数组长度直接舍弃; 同时将当前索引位后一位复写为 0...复写 * @param arr 等待复写数组 */ public static void duplicateZeros(int[] arr) { // 遍历数组...,在遇见 0 之后,将后边元素整体向后移,超出数组长度直接舍弃,同时将当前索引位置后一位置为 0 for (int i = 0; i < arr.length - 1; i++)

37240

LeetCode 算法题

# LeetCode 算法题 简单 两数之和 回文数 罗马数字转整数 合并两个有序链表 每天一道,没坚持下去 # 简单 # 两数之和 题目地址 (opens new window) 给定一个整数数组...nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 那 两个 整数,并返回它们数组下标。...你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。...C 可以放在 D (500) 和 M (1000) 左边,来表示 400 和 900。 给定一个罗马数字,将其转换成整数。...因为每次循环迭代中,l1 和 l2 只有一个元素会被放进合并链表中, 因此 while 循环次数不会超过两个链表长度之和。

30210

复写

复写 给你一个长度固定整数数组 arr ,请你将该数组出现每个都复写一遍,并将其元素向右平移。 注意:请不要在超过该数组长度位置写入元素。...请对输入数组 就地 进行上述修改,不要从函数返回任何东西。...arr = [1,2,3] 输出:[1,2,3] 解释:调用函数后,输入数组将被修改为:[1,2,3] 提示: 1 <= arr.length <= 104 0 <= arr[i] <= 9...出现会复写两次,导致没有复写数「被覆盖掉」。因此我们选择「从后往前」复写策略。但是「从后向前」复写时候,我们需要找到「最后⼀个复写数」,因此我们⼤体流程分两步: i....从cur 位置开始往前遍历原数组,依次还原出复写后结果数组: i. 判断cur 位置值: 1.

4210

JS数组操作

1、数组查询 当前字符串中包含字母和数字, 用一个方法实现出现最多字母和数字 a)如果只有字母, 那么只返回出现最多字母, 只有数字情况同理 b)如果有相同次数多字母或数字出现,将按照第一次出现顺序返回...给定两个数组,用一个方法来计算他们公共元素 var nums1 = [1, 2, 2, 1] var nums2 = [2, 3, 4, 5, 6, 1, 1] // 返回[1, 2, 1] //...10,数值区间为[0, 100)整数类型数组,如:[2, 10, 3, 4, 5, 11, 10, 11, 20, 30] 将其排列成一个数据,要求升序排列,10分位相同数为一个数组数组形式如...给定一个数组,将数组元素向右移动k个位置,其中k是非负数。...newArr) 11.算法题【移动给定一个数组nums,编写一个函数将所有0移动到数组末尾,同时保持非元素相对顺序 输入:[0, 1, 0, 3, 12] 输出:[1, 3, 12, 0,

8.3K10

数据结构和算法之数组(难度级别:初级)

数组大小 在 C 语言中,数组具有固定大小,这意味着一旦给定了大小,它就无法更改,即您不能缩小它,也不能扩展它。...数组索引类型 : 0(从开始索引):数组一个元素由下标 0 索引。 1(从一开始索引):数组第二个元素以 1 下标进行索引。 n(基于 n 索引):可以自由选择数组基本索引。...C++代码 #include using namespace std; int main() { // 创建一个大小为 10 名为 arr 整数数组。...int arr[10]; // 访问 0 索引处元素将其值设置为 5。 arr[0] = 5; // 在 0 索引处访问和打印值,我们得到输出为 5。...cout << arr[0]; return 0; } 输出 5 这里输出了值 5,因为第一个元素索引为,并且在第个索引处我们已经分配了值 5。 使用数组优点: 数组允许随机访问元素

54221

C语言: 操作符详解

1、算术操作符 +    -    *    /    % 加 减   乘  除  取 用法: 1、除了%之外,其他几个操作符能用作整数和浮点数。...%只能用于整数 2、对于/操作符,如果两个操作数都是整数,那就是整数运算。如果有浮点数,那就是进行浮点数除法。 3、%得到是整除之后余数。 例如:5%2值为1。...9、逗号表达式 exp1, exp2, exp3, …expN 从左向右执行 10、下表引用、函数调用和结构成员 1、下标引用操作符 [ ] 操作数:一个数组名 + 一个索引值 int arr...[10];//创建数组 arr[9] = 10;//实用下标引用操作符。...[ ]两个操作数是arr和9。 数组名传是第一个下标,所以 上面两行打印效果相同,都是打印了同一个地址  上面的效果也相同,都是打印了同一个元素

41140

文心一言 VS chatgpt (3)-- 算法导论2.1

终止:当循环终止时,有两种情况:(a) 找到了等于 v 元素,返回其下标 i;(b) 遍历完整个数组后没有找到等于 v 元素,此时返回 NIL。在两种情况下,循环不变式成立。...因此,根据循环不变式,可以证明该算法正确性。图片四、考虑把两个n 位二进制整数加起来问题,这两个整数分别存储在两个n元数组A和B中。这两个整数和应按二进制形式存储在一个(n+1)元数组 C中。...请给出该问题形式化描述,并写出伪代码。文心一言:题目描述:给定两个n位二进制整数A和B,它们和应按二进制形式存储在一个(n+1)元数组C中。...请你编写一个算法,将A和B和转换为二进制形式存储在C中。算法步骤:1.创建一个(n+1)元数组C,长度为n+1。2.将A和B值按位相加,并将结果存储在C一个位置。...图片图片chatgpt:问题形式化描述:输入:两个n元数组A和B,表示两个二进制整数;输出:一个(n+1)元数组C,表示两个二进制整数和。

38010

LeetCode数组高频题目整理

删除排序数组重复项(0.493) 题目描述   给定一个排序数组,你需要在 原地 删除重复出现元素,使得每个元素出现一次,返回移除后数组长度。   ...移动(0.601) 题目描述 给定一个数组 nums,编写一个函数将所有 0 移动到数组末尾,同时保持非元素相对顺序。...数组度(0.521) 题目描述 给定一个非空且只包含非负数整数数组 nums, 数组定义是指数组里任一元素出现频数最大值。...非递减数列(0.221)未做 题目描述 给你一个长度为 n 整数数组,请你判断在 最多 改变 1 个元素情况下,该数组能否变成一个非递减数列。...有序数组出现次数超过25%元素(0.607) 题目描述 给你一个非递减 有序 整数数组,已知这个数组中恰好有一个整数,它出现次数超过数组元素总数 25%。

1.4K20

查找算法

映射标记查找 接下来介绍一种“标记”思想查找:我们对每次出现数字都用一个标记数组一个“标记”,表示这个数字出现过,那么当我们查找时候,我们直接去看一下标记数组中有没有这个“标记”就行了,下面来看看代码...,如果我输入一个长度为几万甚至几亿字符串,哪有那么大数组下标储存啊!...对于这个问题,我们可以通过取来解决:我们限定一个数组最大下标值,然后把所有算得到整数值取这个最大下标就行了。...还有一个问题:对于一个下标只能储存一个值,如果出现了两个字符串转换出来数组下标相同情况怎么办呢,我们可以采用移位来处理,将冲突那个字符串转换数组下标的整形值通过变换数值来避免冲突,进而储存,下面给出代码..., * 在数组下标移位时候, * 我们要让移位数值和数组下标的最大值互质 , * 这样才能使得移位成功(因为要进行取运算)

67920

文心一言 VS chatgpt (3)-- 算法导论2.1

终止:当循环终止时,有两种情况:(a) 找到了等于 v 元素,返回其下标 i;(b) 遍历完整个数组后没有找到等于 v 元素,此时返回 NIL。在两种情况下,循环不变式成立。...这两个整数和应按二进制形式存储在一个(n+1)元数组 C中。请给出该问题形式化描述,并写出伪代码。...文心一言: 题目描述: 给定两个n位二进制整数A和B,它们和应按二进制形式存储在一个(n+1)元数组C中。请你编写一个算法,将A和B和转换为二进制形式存储在C中。...算法步骤: 1.创建一个(n+1)元数组C,长度为n+1。 2.将A和B值按位相加,并将结果存储在C一个位置。 3.将C一个位置后面的所有位置设置为0,以便存储下一个元素。...chatgpt: 问题形式化描述: 输入:两个n元数组A和B,表示两个二进制整数; 输出:一个(n+1)元数组C,表示两个二进制整数和。

16330
领券