
顺序表
csdner1998
这个作者很懒,什么都没留下…
展开
-
lesson19-1 写作业的学生人数
题目描述:在既定时间做作业的学生人数给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。代码://querytime介于开始时原创 2020-08-23 19:39:59 · 118 阅读 · 0 评论 -
lesson18-1 杨辉三角
题目描述:二项式展开式的系数为C(n,0)=1,C(n,n)=1,对于n0C(n,k)=C(n-1,k)+C(n-1,k-1),对于0<k<n其形成著名的杨辉三角。(1)试写一个递归算法,根据上式生成C(n,k).(2)试写一个非递归算法,既不用数组也不用栈,对于任意的0kn,计算C(n,k)...原创 2020-08-21 19:28:03 · 135 阅读 · 0 评论 -
lesson17-4 孩子分糖果
题目描述:给你一个数组candies和一个整数extraCandies,其中candies[i]代表第 i 个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有 最多的糖果。注意,允许有多个孩子同时拥有 最多的糖果数目。思想:贪心算法。代码:void getMaxCandies(int candies[],int extra,int length){ char res[MAXSIZE]={};...原创 2020-08-21 19:19:50 · 166 阅读 · 0 评论 -
lesson17-1 返回数组中两个最大数值的乘积
题目描述:给出一个整数数组 nums,请选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。请你算并返回该式的最大值,其中nums[i]为正数(最好使用两种思路方法来完成)思路1:将整个数组按照递增有序进行排序,拿到第一大和第二大的数。思路2:直接找到最大的两个数。代码1:int getMaxValue1(int nums[],int length){//将数组进行递增有序排序,返回最大值与第二大值的乘积 bubbleS.原创 2020-08-21 19:03:20 · 399 阅读 · 0 评论 -
lesson16-1 《算法与数据结构》P35Q40
题目描述:线性表中元素递增有序且按顺序存储与计算机内。要求设计一算法完成:(1)用最少时间在表中查找数值为x的元素(2)若找到将其与后继元素位置交换(3)若找不到,将其插入表中并使表中元素仍递增有序思路:用二分查找法进行查找,时间复杂度为O(logn)。代码:int flag=0;//默认没找到元素xvoid swapOrInsert(int a[],int &length,int low,int high,int x){ int index=halfSe.原创 2020-08-16 17:39:18 · 199 阅读 · 0 评论 -
lesson16-1 桌上有 n 堆硬币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有硬币的最少次数。
代码1:int getMinCount(int coins[],int length){ int res=0; for(int i=0;i<length;i++){ res+=(coins[i]+1)/2; } return res;}代码2:int getMinCount1(int coins[],int length){ int res=0; for(int i=0;i<length;i++){ if(coins[i]%2!=0) res+=coi原创 2020-08-16 18:13:29 · 1753 阅读 · 0 评论 -
lesson15-1 动态和
题目:给出一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回 nums 的动态和。输入:nums = [1,2,3,4]输出:[1,3,6,10]解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。代码:void runningSum(int nums[],int i){//只需要处理核心逻辑问题,不去关心非逻辑问题,比如输出之类的。 for(int j=1;j<i;j+原创 2020-08-14 18:43:18 · 167 阅读 · 0 评论 -
lesson14-1 买入股票的最佳时机
题目描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5原创 2020-08-19 11:10:18 · 140 阅读 · 0 评论 -
lesson13-1 顺序表找主元素(2013统考真题)
题目描述:王道P19 Q12主元素:一个数组中某个元素数为k个,数组长度为n,如果k>n/2,那这个数就是主元素。思想:先把整个数组按递增排序,主元素一定在中间位置,找出n/2位置的那个数,如果那个数是主元素,那么就是,否则就不是。代码:int getMajority(int A[],int n){ bubbleSort(A,n); int median=A[n/2]; int count=0;//记录中位数个数 for(int i=0;i<n;i++){ if原创 2020-08-07 22:43:48 · 271 阅读 · 0 评论 -
lesson 12-1 设计一个算法,找出1000以内的所有完美数
思路:完美数是指一个数是除了自身之外的因子的和。代码:bool isPerfectNum(int num){ int sum=0; for(int i=1;i<num-1;i++){ if(num%i==0){ sum=sum+i; } } return sum==num?true:false; }测试:#include<stdio.h>#include <stdlib.h>#include<math.h> //原创 2020-08-07 22:45:31 · 396 阅读 · 0 评论 -
lesson11-1 设计一个算法,可以删除顺序表中所有值为x的元素
思路1:不创建新的数组,将数组中值不为x的元素,覆盖原来值为x的元素。代码1:void searchAndDelete(int arr[],int x,int &length){ int count=0;//用count来记录数组中不等于x的元素的个数 for(int i=0;i<length;i++){ if(arr[i]!=x){ arr[count++]=arr[i]; } } length=count;}思路2:创建一个新的数组,将值不为x原创 2020-08-07 22:48:04 · 3107 阅读 · 0 评论 -
lesson10-1 实现冒泡算法
代码:void bubbleSort(int a[],int length){ int flag; for(int i=length-1;i>=1;--i){ flag=0; for(int j=1;j<=i;j++){ if(a[j-1]>a[j]){ swap(a[j-1],a[j]); flag=1; } } } if(flag==0) return;}void swap(int &a,int &b){原创 2020-08-19 11:14:05 · 115 阅读 · 0 评论 -
lesson9-1 快速排序 (一次遍历)
void partition(int arr[],int n){ int temp=arr[0]; int i=0,j=n-1; while(i<j){ while(i<j&&arr[j]>=temp) --j; if(i<j) //当arr[j]<temp时,跳出while循环,用arr[j]的值覆盖arr[i] arr[i++]=arr[j];//等价于arr[i]=arr[j]; i++; w...原创 2020-08-07 22:48:57 · 199 阅读 · 0 评论