- 21、有序数组的平方
- 22、三角形的最大周长
- 23、有效的山脉数组
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排
序。
#include22、三角形的最大周长#define MAX 1000 int main() { int nums[MAX],i=0,newnums[MAX],m; while(1&&i scanf("%d",&m); nums[i]=m; i+=1; char c = getchar(); if (c == 'n') { break; } } for(int j=0;j newnums[j]=nums[j]*nums[j]; } for(int k=0;k for(int t=k;t if(newnums[k]>newnums[t]){ m=newnums[k]; newnums[k]=newnums[t]; newnums[t]=m; } } } for(int k=0;k printf("%d ",newnums[k]); } return 0; }
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。
如果不能形成任何面积不为零的三角形,返回 0。
思路:先将数组进行排序,方便找到最大周长的边。三角形满足两边之和大于第三边,当确定a>b>c时,只要b+c>a即可,此时取相邻三条边时周长是最大的。
#include23、有效的山脉数组#define MAX 1000 int main() { int a,b,c,nums[MAX],i=0,newnums[MAX],m; while(1&&i scanf("%d",&m); nums[i]=m; i+=1; char c = getchar(); if (c == 'n') { break; } } for(int k=0;k for(int t=k;t if(nums[k] m=nums[k]; nums[k]=nums[t]; nums[t]=m; } } } for(int j=0;j if(nums[j] printf("%d",nums[j]+nums[j+1]+nums[j+2]); return 0; } } printf("0"); return 0; }
给定一个整数数组 arr,如果它是有效的山脉数组就返回 true,否则返回 false。
如果 arr 满足下述条件,那么它是一个山脉数组:
arr.length >= 3
在 0 < i < arr.length - 1 条件下,存在 i 使得:
arr[0] < arr[1] < … arr[i-1] < arr[i]
arr[i] > arr[i+1] > … > arr[arr.length - 1]
思路:只要找到数组中的最大值,然后判断最大值前面部分是升序的(从数组的第一个元素开始到最大值),后面部分是降序的
参考链接:https://zhuanlan.zhihu.com/p/313374247



