数组算法
⑴ js数组组合算法。
var arr一 = [一,二,三,四,5,陆,漆,吧,9]; var arr = arr一.map(function(item,index,array){ return item*item*item; }) 返新数组arr则元素立运算新数
⑵ 数组算法复杂度分析,效率。
关于算法复杂度的问题,是通过算法的步数,和时间还有一个就是内存的占用
还有就是程序转换成机器语言时的大小!
时间你这个是不太好表示了!因为程序太小!
但步数是可以表示的!你可以在程序中间加一个变量记录他的运行次数!但有时会步数一样多!这时就要看他的内存占用啊!语句长短啊!
综合以上
你这个是第一个效率高!
⑶ 数组的应用,希望能给个算法(C语言的)
一般超过三维数组都会选择用一个函数把它映射到一维数组中去的。实际上不用四维数组的,这种方法我写过n维数组的。我们可以先建一个一维数组,设四维数组定义为:a[len1][len2][len3][len4]则有如下映射:
a[x1][x2][x3][x4]
= a[x1-1+(x2-1)*len1+(x3-1)*len1*len2+(x4-1)*len1*len2*len3];
还有一个疑问:四维数组怎么会有行和列呢?行列只是对二位而言的。四维的通常是:x,y,z,t四个轴。
⑷ 两个数组比较(算法) 怎样算最优化
我觉得,如果已知两个数组元素数目相同,那就对两个数组分别排序,然后对两个数组从第一个元素开始进行比较,这样就能得出结果了。
⑸ 请问多个数组全组合算法怎么写
publicclassMain{
publicstaticvoidmain(Stringargs[]){
System.out.println("主程序中运行");
String[]str1={"a","b"};String[]str2={"c","d"};String[]str3={"e","f"};
intn=str1.length*str2.length*str3.length;
intm=0;
String[]str4=newString[n];
for(inti=0;i<str1.length;i++)
for(intk=0;k<str2.length;k++)
for(intl=0;l<str3.length;l++){
str4[m]=str1[i]+str2[k]+str3[l];
m++;
}
for(intj=0;j<n;j++)
System.out.println(str4[j]);
Mainmain=newMain();
String[]str5=main.fun(str1,str2,str3);
for(intj=0;j<str5.length;j++)
System.out.println(str5[j]);
}
String[]fun(String[]str1,String[]str2,String[]str3){
System.out.println("方法调用,传入3个数组,返回排列数组");
intn=str1.length*str2.length*str3.length;
intm=0;
String[]str4=newString[n];
for(inti=0;i<str1.length;i++)
for(intk=0;k<str2.length;k++)
for(intl=0;l<str3.length;l++){
str4[m]=str1[i]+str2[k]+str3[l];
m++;
}
returnstr4;
}
}
直接主程序可以直接运行的亲,直接主程序和方法调用两种方法都有哦,运行结果如下
⑹ 数组求和算法
靠,这么麻烦的算法不给分?
=====================================================
这个算法和你问题只差2小步了。
⑺ 关于数组算法的问题
二分该数的位置
输入数设为x,数组设为a,数组长度为n
若我们取a[mid]与x比较
由于a是升序的,a[mid]前面的数都比a[mid]小,所以若x>a[mid] 则x>a[mid]前面的所有数,我们想要的答案就在区间[mid+1, n]。
反之答案与[1,mid-1]之间,若a[mid]=x,就退出算法(找到答案),若a[mid]<x且a[mid+1]>x,则x相邻角标也已找到,就为mid与mid+1.
分析这个算法的时间复杂度,
判断答案在不在[l,r]中,取mid=(l+r)/2.这样花O(1)判断后即可锁定答案在[l,mid-1]还是在[mid+1,r]
这样设规模为n的问题时间耗费为T(n)
则由算法过程可知:T(n)=O(1)+T(n/2) , T(1)=O(0)
n=2时,T(2)=O(1)+O(0)=O(1)
n=4时,T(4)=O(1)+O(1)=O(2)
n=8时,T(8)=O(1)+O(2)=O(3)
可发现
0=log2(1),
1=log2(2),
2=log2(4),
3=log2(8).
用数学归纳法(详见《数据结构与算法初步》中“分治算法的时间复杂度计算”)即可证明该算法时间复杂度为O(log2(n)).
顺便给份代码(c++):
#include<cstdio>
int main(){
int a[100005]={0,2,3,4,66,456,2222},n=6,x=1,ans,ret;//位置0按中国习惯不放数。
int l=1,r=6,mid;//搜索区间[1,6]
while(l<=r){
mid=(l+r)>>1;
if(a[mid]==x){ ans=mid;break; }
if(a[mid]<x && a[mid+1]>x){ ret=mid;break; }
if(a[mid]<x) l=mid;
else r=mid;
}
if(ans) printf("%d",ans);
else printf("%d %d",ret,ret+1);
}
注意,若查询的数没有前一个或后一个数,则会出错
如果为了简洁,用下面这个:
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int a[100005]={0,2,3,4,66,456,2222},n=6,x=567,ans,ret;//位置0按中国习惯不放数。
ans=lower_bound(a+1,a+7,x)-a;
if(a[ans]==x) printf("%d",ans);
else printf("%d %d",ans-1,ans);
}
lower_bound返回(升序)数组中第一个大于等于x的数的指针
⑻ 数组的平方计算方法
表示没有看明白。
⑼ 求数组算法 分奇偶数
两个下标,i从前到后循环。j从后往前循环。
i=0,j=99
while(i<=j)
{
1.当i指向的元素为奇数时,i++
2.当j指向的元素为偶数时,j--
3.如果i指向的元素为偶数且j指向的元素为奇数,则交换i,j指向的元素,然后i++,j--
}
最后根据i的大小,可以判断奇数的个数。
最坏情况99次可以搞定。
⑽ C语言数组去重算法
#include <stdio.h> #include <malloc.h> using namespace std ; bool isRepeat(int *arr,int len,int elem) { for(int i = 0 ; i < len ; i++) if(arr[i]==elem) return true ; return false ; } int* delRepeat(int *arr,int len) { int *tar = (int*)malloc(sizeof(int)) ; int temp ; unsigned char i ; unsigned char j = 0 ; tar[j] = arr[0] ; for(i=1;i<len;i++) { if(!isRepeat(tar,j+1,arr[i])) { tar = (int*)realloc(tar,sizeof(int)*(j+2)) ; tar[++j] = arr[i] ; } } return tar ; } int main() { int a[5] = {1,2,2,3,3} ; int *b = delRepeat(a,5) ; return 0 ; }