今天学习了一下归并排序
利用的基本的思想的是二分
1把数组进行划分(二分的划分)
2对数组进行合并(排序的划分)
一共就是两步,看似确实简单
其实难度确实简单,代码的话稍稍的长了一点
#include
#include
int arr[1000010];
int n;
//合并函数
void hbing(int jr[],int arr[],int l,int mid,int r){
int lr=l;
int rr=mid+1;
int pos=l;
while(lr<=mid&&rr<=r){
if(arr[lr]
递归二分到只有一个元素
并且开一个数组记录合并的过程
最后把创建的数组,赋值给原数组,这样原数组就排好了
排序确实没啥好讲的
来点题目好搞
1641. 统计字典序元音字符串的数目
难度中等156收藏分享切换为英文接收动态反馈
给你一个整数 n
,请返回长度为 n
、仅由元音 (a
, e
, i
, o
, u
) 组成且按 字典序排列 的字符串数量。
字符串 s
按 字典序排列 需要满足:对于所有有效的 i
,s[i]
在字母表中的位置总是与 s[i+1]
相同或在 s[i+1]
之前。
示例 1:
输入:n = 1
输出:5
解释:仅由元音组成的 5 个字典序字符串为 ["a","e","i","o","u"]
示例 2:
输入:n = 2 输出:15 解释:仅由元音组成的 15 个字典序字符串为 ["aa","ae","ai","ao","au","ee","ei","eo","eu","ii","io","iu","oo","ou","uu"] 注意,"ea" 不是符合题意的字符串,因为 'e' 在字母表中的位置比 'a' 靠后
示例 3:
输入:n = 33 输出:66045
有点dp的味道
要得到ans[n]等于以每个原音字母结尾字符串的和
我们用a[]数组来记录每个字母结尾的数目
n长度的字符串的个数与n-1的字符串的尾字母有关
可以得到递推关系
a[n]=a[n-1]+a[n-2]......a[1];
不断的递推更新a[]数组
最后把a[]数组全部加起来就是答案了
int countVowelStrings(int n){
int a[6];
a[5]=1;
a[4]=1;
a[3]=1;
a[2]=1;
a[1]=1;
for(int u=1;u
懒得用递归了,用循环可以搞定的,就不上递归了
下一个
给你一个整数数组 nums ,返回出现最频繁的偶数元素。
如果存在多个满足条件的元素,只需要返回 最小 的一个。如果不存在这样的元素,返回 -1 。
示例 1:
输入:nums = [0,1,2,2,4,4,1]
输出:2
解释:
数组中的偶数元素为 0、2 和 4 ,在这些元素中,2 和 4 出现次数最多。
返回最小的那个,即返回 2 。
示例 2:
输入:nums = [4,4,4,9,2,4]
输出:4
解释:4 是出现最频繁的偶数元素。
示例 3:
输入:nums = [29,47,21,41,13,37,25,7]
输出:-1
解释:不存在偶数元素。
提示:
1 <= nums.length <= 2000
0 <= nums[i] <= 105
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/most-frequent-even-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
没啥技术和思想就,纯纯的枚举暴力出奇迹
int mostFrequentEven(int* nums, int numsSize){
int a[10000];
int b[10000]={0};
int i=0;
for(int j=0;j=l){
if(b[j]==l){
if(max>a[j]){
l=b[j];
max=a[j];
}
}
else{
l=b[j];
max=a[j];
}
}
}
return max;
}
写的有点少没状态呀,可恶还是有点不习惯呀,但是越来越好了
对封装的能力越来越厉害了呀哈哈
还要写两题
但是先写到这了
撒花谢幕!!!!!!