
数组
数组
想名字多费事
编程小白入驻
展开
-
二维数组数组名的使用
#include <iostream>using namespace std;#include<stdio.h>int test(){ int a[2][4]={{3,6,9,12},{15,18,21,24}}; cout<<*(*(a+1)+2)<<endl;//21 return a[1][1]+*(a[1]+2)+*(*(a+1)+2);//18+21+21}int main(){ /*测试一:原创 2021-10-17 18:30:16 · 771 阅读 · 0 评论 -
合并排序的数组
从后向前三指针时间复杂度:O(m + n)空间复杂度:O(1)class Solution {public: void merge(vector<int>& A, int m, vector<int>& B, int n) { int a=m-1;//A数组索引 int b=n-1;//B数组索引 int l=m+n-1;//结果数组索引 while(a>=0&&b>.原创 2021-09-27 15:47:25 · 345 阅读 · 0 评论 -
不修改数组找出重复的数字
在长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。思路:一、把1~n的数字从中间的数字m分成两部分,前面一半为1 ~m,后面一半为m+1 ~ n;二、若1 ~ m的数字的数目超过m,那么这一半的区间里一定包含重复的数字;否则另 一半m+1 ~n的区间里一定包含重复的数字。三、继续把包含重复数字的区间一分为二,直到找到一个重复的数字。时间复杂度:O(nlog(n))空间复杂度:O(.原创 2021-09-25 17:08:35 · 262 阅读 · 0 评论 -
数组中重复的数字
思路一:用unordered_map保存即可bool duplicate(int nums[],int len,int* duplication){ if(nums==nullptr||len<=0) return false; for(int ii=0;ii<len;ii++){ if(nums[ii]<0||nums[ii]>=len) return false; } unordered_map<int,int.原创 2021-09-24 22:02:51 · 156 阅读 · 0 评论 -
返回“最大数”
思路:自定义排序 A+B >B+Aclass Solution {public: /* static bool cmp(string& a,string& b){ string c=a+b; string d=b+a; return c>d; } */ string largestNumber(vector<int>&.原创 2021-09-18 16:53:55 · 155 阅读 · 0 评论 -
螺旋矩阵II
关键点:定义边界模拟输出class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { if(matrix.size()==0) return {}; vector<int> res; //定义上下左右边界,注意图和实际是相反的 int up=0; int down=.原创 2021-09-13 17:34:32 · 118 阅读 · 0 评论 -
最大连续1的个数
解法一:暴力遍历class Solution {public: int findMaxConsecutiveOnes(vector<int>& nums) { int res=0,temp=0; auto it=nums.begin(); while(it!=nums.end()){ if(*(it++)==1) ++temp;//一直累积1的数量 else { .原创 2021-09-10 11:31:05 · 146 阅读 · 0 评论 -
合并两个有序数组
解法一:class Solution {public: void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) { int index=m; for(int ii=0;ii<n;ii++){ nums1[index++]=nums2[ii]; } sort(nums1.begin(),.原创 2021-08-12 12:02:44 · 105 阅读 · 0 评论 -
回文数的个数、杨辉三角
全部翻转#include <bits/stdc++.h>using namespace std;bool is_palindrome(int n) { int n1 = n, n2 = 0; while (n1 > 0) {//首先只有大于0的正整数满足下一步判断 n2 = n2 * 10 + n1 % 10;//将数字翻转,则首先取最后一位,除10取余,拿出最后一位 n1 /= 10; //取一位就减少一位,除10取整,删掉最后.原创 2021-05-20 16:22:03 · 282 阅读 · 0 评论 -
校门外的树+矩阵旋转
#include<iostream>#include<vector>using namespace std;int main() { int L,M,num=0,a,b; cin>>L>>M; vector<int> res{0}; res.resize(L); for(int i=1; i<=M; i++) { cin>>a>>b; r..原创 2021-05-11 20:51:57 · 94 阅读 · 0 评论 -
螺旋矩阵
求解本题要坚持循环不变量原则。1、想象一下我们顺时针画矩阵的过程:上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上填充由外向内一圈一圈这么画下去。2、再观察示例输出,结合是利用verctor实现的二维数组,发现需要如下方式模拟填充。原则是按照左闭右开的方式。class Solution {public: vector<vector<int>> generateMatrix(int n) { vector<vector&.原创 2021-05-02 21:14:14 · 164 阅读 · 0 评论 -
长度最小的子数组--滑动窗口
暴力法两个for循环,然后不断的寻找符合条件的子序列,时间复杂度很明显是O(n^2) 。时间复杂度:O(n^2)空间复杂度:O(1)class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int result=INT32_MAX;//最终结果。要返回长度最小长度,起始设置为最大,等待更新 int sum; //用来计算子序列的数值之和 .原创 2021-05-02 16:08:11 · 215 阅读 · 0 评论 -
移除元素--双指针法
数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖暴力法两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。// 时间复杂度:O(n^2)// 空间复杂度:O(1)class Solution {public: int removeElement(vector<int>& nums, int val) { int size = nums.size(); for (int ii = 0; ii &.原创 2021-05-02 13:05:26 · 243 阅读 · 0 评论 -
二分查找法
这道题目,要在数组中插入目标值,无非是这四种情况。1、目标值在数组所有元素之前2、目标值等于数组中某一个元素3、目标值插入数组中的位置4、目标值在数组所有元素之后这四种情况确认清楚了,就可以尝试解题了。暴力解法class Solution{public: int searchInsert(vector<int>& nums,int target){ // 目标值在数组所有元素之前(如果第一个元素就比目标值大,说明目标值在应插在数组最前面) .原创 2021-05-02 11:10:38 · 173 阅读 · 0 评论 -
数组理论知识
数组下标都是从0开始的。数组内存空间的地址是连续的数组的元素是不能删的,只能覆盖。在C++中二维数组是连续分布的。void test_arr() { int array[2][3] = { {0, 1, 2}, {3, 4, 5} }; cout << &array[0][0] << " " << &array[0][1] << " " << &array[0][2原创 2021-05-02 09:43:25 · 198 阅读 · 0 评论