數組演算法
⑴ 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 ; }