> 文章列表 > 【LeetCode】代码随想录之数组

【LeetCode】代码随想录之数组

【LeetCode】代码随想录之数组

代码随想录

数组理论基础

C++的数组在内存空间中是连续的,但有区别与Vector与Array,Vector是一个容器,它的底层实现为数组。其中二维数组的内存空间也是连续的,C++与JAVA的区别在与可以给出真实的内存地址。

1.二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。704. 二分查找

C++:
class Solution {
public:int search(vector<int>& nums, int target) {int n = nums.size();int left = 0;int right= n-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;}
};
Python3:
class Solution:def search(self, nums: List[int], target: int) -> int:left, right = 0, len(nums)-1while left <= right:mid = left + (right - left)//2if nums[mid] > target:right = mid -1elif nums[mid] < target:left = mid + 1else:return midreturn -1

二分查找中注意[a,b]与[a,b)可能是两种不同的写法。

2.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。

示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

你不需要考虑数组中超出新长度后面的元素。27.移除元素

C++
class Solution {
public:int removeElement(vector<int>& nums, int val) {int cur = 0;int n = nums.size();for (int i = 0; i < n; i++) {if (nums[i] == val) {continue;}else {nums[cur] = nums[i];cur++;}}return cur;}
};
Python:
class Solution:def removeElement(self, nums: List[int], val: int) -> int:size = len(nums)fast = 0slow = 0while fast < size:if val != nums[fast]:nums[slow] = nums[fast]slow+=1fast+=1return slow

主要考察快慢指针的搭配使用,注意return时由于上次++在当前未使用所以可以直接当做大小返回,不需要在因为下标从0开始而+1。
TODO:2023/4/15未完待续…【LeetCode】代码随想录之数组