-
Java小实例:删除数组元素
2017-08-02 08:49:30有一个有序整数数组,要求输入一个数字,在数组中查找是否有这个数, 如果有,将该数从数组中删除,要求删除后的数组仍然保持有序; 如果没有,则显示“数组中没有这个数!” 分析: 1.首先先定义一个数组...删除数组元素 功能描述:
有一个有序整数数组,要求输入一个数字,在数组中查找是否有这个数,
如果有,将该数从数组中删除,要求删除后的数组仍然保持有序;
如果没有,则显示“数组中没有这个数!”
分析:
1.首先先定义一个数组
2.用scanner的方法得到一个数字
3.先用循环遍历每个数组的元素
4.看输入的数字是否和数组的元素相同
5.可以利用位数关系来删除数组(注意不要下标越界)
代码如下:
总结:public class excercise5 { public static void main(String[] args) { int a[] = { 1, 4, 6, 9, 13, 16, 19, 28, 40, 100 }; int number, i, j; System.out.println("原始数组为:"); for (i = 0; i < a.length; i++) { System.out.print(a[i] + "\t"); } System.out.println("\n"); Scanner input = new Scanner(System.in); System.out.print("输入一个数字:"); number = input.nextInt(); for (i = 0; i < a.length; i++) { if (a[i] == number) { break; } } if (i < a.length) { for (j = i; j < a.length - 1; j++) { a[j] = a[j + 1]; } System.out.println("删除后的数组为:"); for (i = 0; i < a.length - 1; i++) { System.out.print(a[i] + "\t"); } System.out.println("\n"); } else { System.out.println("数组中没有这个数!"); } } }
我们必须要知道数组中的元素被删除并没有改变数组的长度,千万注意不要下标越界的问题
不用方法就可以使用判断位数的问题,正好一个个的排列,顺序也有了。
-
CF - 1385C -- Make It Good【求后缀数组凸型长度最长】
2020-07-18 12:29:35给定一个数组,让我们删除一个最小前缀数组,然后得到一个C数组,C数组满足,每次拿首尾(先拿尾,或者先拿首)数字放到一个新数组中,最后使其变成有序的。 思路: 我们观察C数组会发现,C数组是一个凸型(小->大-&...Make It Good
题意:
给定一个数组,让我们删除一个最小前缀数组,然后得到一个C数组,C数组满足, 每次拿首尾(先拿尾,或者先拿首)数字放到一个新数组中,最后使其变成有序的。
思路:
我们观察C数组会发现,C数组是一个凸型(小->大->小),题目又告诉删除最小前 缀数组,那么我们可以从后往前遍历,求一个后缀数组凸型即可。
AC代码
#include<iostream> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; const int maxn=2e5+5; int arr[maxn]; int main(){ int t, n; scanf("%d", &t); while (t--){ scanf("%d", &n); for (int i=1; i<=n; ++i){ scanf("%d", &arr[i]); } int i,j; for(i=n; i>=2; --i){ if (arr[i] > arr[i-1]) break; } for(j=i ; j>=2; --j){ if (arr[j] < arr[j-1]) break; } printf("%d\n", j-1); } return 0; }
-
JavaScript权威指南读书笔记(5)——数组
2020-05-21 08:40:211、数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。数组元素可以是任意类型,...(2)pop()从数组尾部删除一个元素,并返回被删除元素的值;(3)splice()插入、删除或1、数组是值的有序集合。每个值叫做一个元素,而每个元素在数组中有一个位置,以数字表示,称为索引。数组元素可以是任意类型,同一个数组的不同元素可能有不同的类型。
2、创建数组的方法:(1)数组直接量;(2)调用构造函数Array()。
3、数组引用没有越界错误的概念,当试图查询数组汇总不存在的索引时,不会报错,只会得到undefined值。
4、数组操作的方法:(1)push()在数组末尾增加一个或多个元素;(2)pop()从数组尾部删除一个元素,并返回被删除元素的值;(3)splice()插入、删除或替换数组元素;
5、使用for/in循环遍历数组,不一定按照数组索引进行遍历,采用常规的for循环可以准确控制按照索引顺序遍历数组元素。
6、数组方法
(1)Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生成的字符串。
(2)Array.reverse()方法将数组中的元素颠倒顺序,返回逆序的数组。
(3)Array.sort()方法将数组中的元素排序并返回排序后的数组。当不带参数调用时,数组元素以字母表顺序排序。按照其他方式排序时,必须传递一个比较函数,来比较两个元素的大小。
(4)Array.concat()方法创建并返回一个新数组,它的元素包括调用concat()的原始数组的元素和concat()的每个参数。
(5)Array.slice()方法返回指定数组的一个片段或子数组。
(6)Array.splice()方法能够从数组中删除元素、插入元素到数组中或者同时完成这两种操作。
(7)Array.push()方法在数组的尾部添加一个或多个元素,并返回数组新的长度。Array.pop()方法删除数组的最后一个元素,减小数组长度并返回删除元素的值。
(8)Array.unshift()方法在数组的头部添加一个或者多个元素,并将已存在的元素移动到更高索引的位置来获得足够的空间,最后返回数组新的长度。Array.shift()方法删除数组的第一个元素并将其返回,然后将所有随后的元素下移一个位置来填补数组头部的空缺。
(9)Array.toString()与Array.toLocaleString()方法将数组的每个元素转换为字符串,并输出用逗号分隔的字符串列表。toLocaleSting()方法会本地化字符串。
(10)Array.forEach()方法是ECMAScript 5支持的方法,从头到尾遍历数组,为每个元素调用指定的函数。
(11)Array.map()方法将调用的数组每个元素传递给指定的函数,并返回一个新数组,它包含该函数的返回值。
(12)Array.filter()方法返回的数组元素是调用的数组额一个子集。传递的函数用来逻辑判定是否返回此数组元素。判定函数返回值为true或者能转换为true的值时,此数组元素为返回数组的成员。
(13)Array.every()与Array.some()用于对数组元素进行逻辑判定,如果数组元素中对every()方法中的判定函数都返回为true时,every()函数返回为true。some()方法中的判定函数任意一个返回为true时,some()函数返回为true。此二函数一旦确定返回值后,就会停止数组遍历。
(14)Array.reduce()与Array.reduceRight()方法使用指定的函数将数组元素进行组合,生成单个值。这种操作也可以成为“注入”和“折叠”。
(15)Array.indexOf()和Array.lastIndexOf()方法搜索整个数组中具有给定值的元素,返回找到的第一个元素的索引,如果没有找到就返回-1.前者从头至尾搜索,后者则从尾部向前搜索。7、判定一个对象是否是数组,在ECMScript中,可以使用Array.isArray()方法。
-
leetcode 480. 滑动窗口中位数
2020-09-15 22:08:24题目描述 中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。...主要是维护一个有序的数组,每次移动的时候使用二分查找进行相应的删除和插入操作。 ...题目描述
中位数是有序序列最中间的那个数。如果序列的大小是偶数,则没有最中间的数;此时中位数是最中间的两个数的平均数。
例如:[2,3,4],中位数是 3
[2,3],中位数是 (2 + 3) / 2 = 2.5
给你一个数组 nums,有一个大小为 k 的窗口从最左端滑动到最右端。窗口中有 k 个数,每次窗口向右移动 1 位。你的任务是找出每次窗口移动后得到的新窗口中元素的中位数,并输出由它们组成的数组。分析
主要是维护一个有序的数组,每次移动的时候使用二分查找进行相应的删除和插入操作。
代码
class Solution { public: int binarySearch(vector<int>& arr, int target, int k){ int l =0; int r =k; while(l<r){ int mid = l+(r-l)/2; if(arr[mid]<target) l = mid+1; else r=mid; } return l; } vector<double> medianSlidingWindow(vector<int>& nums, int k) { //这个滑动窗口每次去除一个元素并且新增加一个元素 //先对前k个元素进行排序 vector<double> res; //申请一个k+1长的数组,之后就一直进行维持这个k大小的有序数组 vector<int> arr(k+1, INT_MAX); for(int i=0;i<k;i++) arr[i] = nums[i]; sort(arr.begin(), arr.begin()+k); if(k%2==1){ res.push_back(arr[k/2]); }else{ res.push_back(arr[k/2-1]/2.0 + arr[k/2]/2.0); } //为了统一数组的长度为偶数或者为奇数,以及为了防止整数溢出,可以按照如下的处理 //res.push_back(arr[k-1/2]/2.0 + arr[k/2]/2.0); for(int i=0;i<nums.size()-k;i++){ //删除当前的元素i, 新增加元素i+k //使用二分查找,寻找等于arr[i]的元素,并且使用二分查找寻找左边大于等于arr[i+k]的最小值 int index = binarySearch(arr, nums[i], k);//这个肯定是寻找等于target的索引 //删除这个相等的元素,即后面的元素都前移动 for(int j=index+1;j<k;j++){ arr[j-1]=arr[j]; } //再插入一个元素 int index2 = binarySearch(arr, nums[i+k], k-1); for(int j=k-1;j>=index2;j--){ arr[j+1]=arr[j]; } arr[index2] = nums[i+k]; if(k%2==1){ res.push_back(arr[k/2]); }else{ res.push_back(arr[k/2-1]/2.0 + arr[k/2]/2.0); } } return res; } };
-
Python算法(CCF-CSP考试)——哈希算法,两个数的和,单词模式匹配,bulls and cows,神奇的词根
2019-10-29 22:43:06哈希算法: ...预先设置一个长度M的数组,使用哈希函数F并以数据关键字为自变量,得到唯一返回值(0~M-1)。 下图1 哈希冲突 链地址法,有N个哈希地址就有N个链表,数组Hash存放每个链表头指针 下... -
Algs4-1.1.28删除重复元素
2018-10-25 11:20:001.1.28(原问题)删除重复元素...这个问题可以有两种理解:a)每个数只出现一次,例如:1,2,2,3,4,5 去重后得到:1,2,3,4,5b)重复的数字全部删除,例如去重后得到:1,3,4,5。a)实现思路:数组索引从头移至数组倒数第... -
常见数据结构及面试常见代码题(1)
2020-05-14 10:53:07找到数组中第一个不重复的整数 合并两个有序数组 重新排列数组中的正值和负值 栈 应用: 撤销操作 基本操作: Push 顶部插入 Pop 移除栈顶元素 isEmpty 栈为空则返回true Top 返回顶部元素,但不移除 面试常见问题... -
对乘以2而言,肯定存在某一个丑数T2,排在他之前的每一个丑数乘以2得到的结果都会小于已有的最大丑数,在他之后的每一个丑数乘以2得到的结果都会太大,我们只需记下这个丑数的位置,每次生成新的丑数的时候,去更新...
-
hdu 4288 Coder (线段树)
2013-10-21 16:14:28del 在集合中删除一个数 sum 求出在这个集合中下标模 5 得 3的数的和 都保证序列有序 思路: 先把所有的数字输入进来 然后离散化 那么我们可以得到一个数组 就是在操作中会出现的要你插入的数 然后我们就可以开始... -
两个整数链表求和得到一个新的链表 树 求二叉树的高、节点数、中序遍历 判断两个二叉树是否完全相同 判断一个二叉树是否是对称二叉树 字符串 查找最大的非重复字符串 查找最大的回文字符串 基本类型 翻转一...
-
HDU 6215 Brute Force Sorting(伪双向链表删边)
2017-09-19 00:48:46题意:Beerus想把一个序列排序,但是他不会排序,他只会删除一些点(如果一个数比前一个数小或者比后一个字符大就要把这个字符删掉),为了让最后得到得串是有序的,或者是空字符串。问最后剩下的序列是什么? 思路... -
1186. 删除一次得到子数组最大和 1218. 最长定差子序列 1227. 飞机座位分配概率 1261. 在受污染的二叉树中查找元素 1262. 可被三整除的最大和 1297. 子串的最大出现次数 1310. 子数组异或查询 1334. ...
-
【数据结构详解】链表
2018-07-19 18:27:33那就是数组是以下标进行存储的,例如a[1],a[2],a[3]等,而链表则是根据许多数字的前后关系的数字进行存储的,其原理类似于图论中的邻接表,所存储的序列并不是有序的,而是存储这个数的前面(next)和这个数的后面... -
链表及其简单应用
2018-12-14 15:52:00那就是数组是以下标进行存储的,例如a[1],a[2],a[3]等,而链表则是根据许多数字的前后关系的数字进行存储的,其原理类似于图论中的邻接表,所存储的序列并不是有序的,而是存储这个数的前面(next)和这个数的后面... -
leetcode - 1673 - 查找最有竞争力的子序列 - RMQ - 单调栈
2020-12-03 11:44:59文章目录题目描述题目代码题目剖析&...给你一个整数数组 nums 和一个正整数 k ,返回长度为 k 且最具 竞争力 的 nums 子序列。 数组的子序列是从数组中删除一些元素(可能不删除元素)得到的序列。 在子序列 a 和 -
leetcode 217
2018-02-08 10:55:45此题是判断一个数组中是否有数重复,我是利用了set数据结构的性质,讲所有的数都放入到set中,如果vector和set的长度不同,则有重复的数,因为set会自动删除重复的数字。 看了别人的解答,发现set是用二分树实现的,... -
java程序!
2014-03-15 23:59:55二叉堆的删除:每次进行一次堆调整之后,根节点必是最大的(最大堆),每次把根节点a[0]取出和数组第n个数互换,然后再用数组第1个到第n-1个数再次建堆,如此反复取出再建堆,那么得到的新序列必是一个有序序列。... -
3.4.8 找出数组中出现次数超过一半的数,现在有一个数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。 3.4.9 找出被修改过的数字 3.5.0 设计DNS服务器中cache的数据结构。要求设计一个...
-
订单超时解决方案
2020-07-12 17:11:58环型队列 指定长度数组循环,每一个位置存放set集合,计算消耗任务的执行次数,list 自己依照循环次数与休眠时间,存放至指定数组元素与执行次数;定时器模式执行 redis有序集合 排序检索实现 zset;id循环性能消耗... -
上海电机学院C语言实训答案
2012-01-22 15:28:32输入一个正整数n (1),再输入n 个整数,将最小值与第一个数交换,最大值与最后一个数交换,然后输出交换后的n 个数。 (25)抓住肇事者 一辆卡车违反交通规则,撞人后逃跑。现场共有三个目击者,但都没有记住车号,... -
数据结构(C++)有关练习题
2008-01-02 11:27:18综合(课程设计) 内容及步骤: 1、假定一维数组a[n]中的每个元素值均在[0,200]区间内,用C++编写一个算法,分别统计出落在[0,20],[21,50],[51,80],[81,130],[131,200]等各区间内的元素个数。... -
【336-week 07】课后总结
2020-11-25 07:54:21它由一个bit数组和一组Hash算法构成。</li><li>可用于判断一个元素是否在一个集合中,查询效率很高(1-N,最优能逼近于1)</li><li>图示 ... -
《数据结构 1800题》
2012-12-27 16:52:038. 一个算法具有 5个特性: (1)有穷性 、 (2)确定性 、 (3)可行性 ,有零个或多个输入、有一个或多个输出。 《数据结构 1800题》 9.已知如下程序段 FOR i:= n DOWNTO 1 DO {语句 1} BEGIN x:=x+1;... -
世界500强面试题.pdf
2019-11-01 14:33:261.3.9. 左移递减数列查找某一个数................................................................ 60 1.3.10. 对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相 邻(上下左右)某一个元素也... -
C++程序员面试宝典
2013-04-01 13:36:19面试题118 C++支持参数个数不确定的函数吗 130 面试题119 什么是内联函数 131 11.2 函数参数的传递 132 面试题120 引用形参和非引用形参有什么区别 132 面试题121 使用引用形参有什么问题 133 面试题122 指针形参与... -
计算机二级公共基础知识
2011-04-30 14:00:09退队运算是从队列的队头删除一个数据元素。 队列的顺序存储结构一般采用队列循环的形式。循环队列s=0表示队列空;s=1且front=rear表示队列满。计算循环队列的元素个数:“尾指针减头指针”,若为负数,再加其容量... -
数据结构题
2012-12-27 16:58:404.若进栈序列为c, a,b,则通过入出栈操作可能得到的a,b,c的不同排列个数为( ) A.4 B.5 C.3 D.2 5.为查找某一特定单词在文本中出现的位置,可应用的串运算是( ) A.插入 B.删除 C.串联接 D.子串定位 7.三维数组A[4... -
二叉排序树与平衡二叉树的实现
2010-12-26 15:25:31而在二叉排序树上进行查找时的平均查找长度和二叉树的形态有关: ①在最坏情况下,二叉排序树是通过把一个有序表的n个结点依次插入而生成的,此时所得的二叉排序树蜕化为棵深度为n的单支树,它的平均查找长度和... -
图片有的不显示.br标签和a标签直接显示出来.版本0.1.0. 文本如下
2020-12-04 13:58:15删除一个结点,如删除上图中q结点,只需将p结点中的指针域指向a3,然后将a2释放掉(free)即可。 结点的插入: <img alt="" src=...