精华内容
下载资源
问答
  • 计算一个数组中相同元素对的数目

    千次阅读 2017-02-10 14:42:32
    原文地址:Count of index pairs with equal elements in an array已知一个数组有n个元素,任务是计算下标(i,j)(i, j)的总数,其中arr[i] = arr[j]并且i != j。例子:输入:arr[] = {1, 1, 2} 输出:1 因为arr[0] = ...

    原文地址:Count of index pairs with equal elements in an array

    已知一个数组有n个元素,任务是计算下标(i,j)的总数,其中arr[i] = arr[j]并且i != j

    例子:

    输入:arr[] = {1, 1, 2}
    输出:1
    因为arr[0] = arr[1],所以下标对是(0, 1)
    
    输入:arr[] = {1, 1, 1}
    输出:3
    因为arr[0] = arr[1],所以下标对是(0, 1),(0, 2)与(1, 2)
    
    输入:arr[] = {1, 2, 3}
    输出:0

    方法一(暴力法):

    对于每个下标i,找到在数组中它后面的与其值相同的元素。下面是C++的实现:

    // C++ program to count of pairs with equal
    // elements in an array.
    #include<bits/stdc++.h>
    using namespace std;
    
    // Return the number of pairs with equal values.
    int countPairs(int arr[], int n)
    {
        int ans = 0;
    
        // for each index i and j
        for (int i = 0; i < n; i++)
            for (int j = i+1; j < n; j++)
    
                // finding the index with same
                // value but different index.
                if (arr[i] == arr[j])
                    ans++;
        return ans;
    }
    
    // Driven Program
    int main()
    {
        int arr[] = { 1, 1, 2 };
        int n = sizeof(arr)/sizeof(arr[0]);
        cout << countPairs(arr, n) << endl;
        return 0;
    }

    输出:

    1

    时间复杂度:O(n2)

    方法二 (更高效一些):

    这个方法是计算每个元素出现的频率,然后找到相同元素对的数目。假设一个元素x在位置i1,i2,.,ik处出现了k次。那么挑出任意两个 ixiy就计为1次。类似地, iyix也是一对儿。所以对于 arr[i] = arr[j] = x选择C2n次。

    下面是这个方法的C++实现:

    // C++ program to count of index pairs with
    // equal elements in an array.
    #include<bits/stdc++.h>
    using namespace std;
    
    // Return the number of pairs with equal values.
    int countPairs(int arr[], int n)
    {
        unordered_map<int, int> mp;
    
        // Finding frequency of each number.
        for (int i = 0; i < n; i++)
            mp[arr[i]]++;
    
        // Calculating pairs of each value.
        int ans = 0;
        for (auto it=mp.begin(); it!=mp.end(); it++)
        {
            int count = it->second;
            ans += (count * (count - 1))/2;
        }
    
        return ans;
    }
    
    // Driven Program
    int main()
    {
        int arr[] = {1, 1, 2};
        int n = sizeof(arr)/sizeof(arr[0]);
        cout << countPairs(arr, n) << endl;
        return 0;
    }

    输出:

    1

    时间复杂度:O(n)

    来源:

    http://stackoverflow.com/questions/26772364/efficient-algorithm-for-counting-number-of-pairs-of-identical-elements-in-an-arr#comment42124861_26772516

    展开全文
  • splice方法 : 从数组中移除一个或多个元素,如果必要,在所移除的位置上插入新元素,返回所以出的元素. arrayObj.splice(start,deleteCount,[item1,item2]); arrayObj : 必选项.一个Array对象. start 必选项.指定从...

    不学习总是有危机感....

    方法1 :

    splice方法 : 从数组中移除一个或多个元素,如果必要,在所移除的位置上插入新元素,返回所以出的元素.

    arrayObj.splice(start,deleteCount,[item1,item2]);

    arrayObj : 必选项.一个Array对象.

    start 必选项.指定从数组中移除元素的开始位置,这个位置从0开始计算的.

    deleteCount: 必选项.要移除的元素的个数.

    item1,item2: 可选项.要在所以出元素的位置上插入的新元素

    说明: splice方法可以移除从start位置开始的指定个数的元素并插入新元素,从而修改arrayObj,返回值是一个由所移除的元素组成的新的Array对象.

     

    //普通循环
    
    function remove(arr, item) {
        var a = arr.slice(0); //截取0到arr.length之间的长度
    for(var i =0 ;i < a.length; i++)
      { 
        if(a[i]===item){ 
        a.splice(i,1); 
            i--; //很关键,因为上一步数组中移除了元素,数组长度改变了
         } 
    }
     return a; 
     }

    方法二:

    push 方法

      将新元素添加到一个数组中,并返回数组的新长度值.

    语法: arrayObj.push([item[item2[...[itemN]]]])

    参数:

    arrayObj: 一个Array对象

    item,item2,.....,itemN

    可选项.该Array的新元素.

    说明: 方法将以新元素出现的顺序添加这些元素.如果参数之一为数组,那么该数组将作为单个元素添加到数组中.如果要合并两个或多个数组中的元素,那应该使用concat方法.

    如下:

     forEach: 用于调用数组的每个元素,并将元素传递给回调函数

    注意: forEach()对于空数组是不会执行回调函数的

    语法: array.forEach(function(currentValue,index,arr),thisValue)

    function(currentValue,index,arr)

    currentValue:必须,当前元素

    index:可选 当前元素的索引值

    arr:可选,当前元素所属的数组对象

    thisValue:可选,传递给函数的值一般用"this"值.如果这个参数为空,"undefined"回传递给"this"值

    function remove(arr, item) {
    var arrR=[];
    arr.forEach(function(e){
    if(e!==item){
    arrR.push(e);
    }
    })
    return arrR
    }

    方法三:

    filter()方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,但是filter不会对空数组进行检测,也不会改变原始数组.

    currentValue:必须,当前元素

    index:可选 当前元素的索引值

    arr:可选,当前元素所属的数组对象

    thisValue:可选,传递给函数的值一般用"this"值.如果这个参数为空,"undefined"回传递给"this"值

    返回值:返回数组,包含了符合条件的所有元素,如果没有符合条件的则返回空元素

    语法: array.filter(function(courrentValue,index,arr),thisValue)

    //filter
    function remove(arr,item){
    return arr.filter(function(ele){
    return ele != item;
    })
    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 统计数组 arr 中值等于 item 的元素出现的次数 // 7.统计数组 arr 中值等于 item 的元素出现的次数 function count(arr,item){ var count = 0; arr.forEach((i)=>{ if(i == item){ count ++; } }) ...

    题目描述:

    统计数组 arr 中值等于 item 的元素出现的次数

    // 7.统计数组 arr 中值等于 item 的元素出现的次数
    function count(arr,item){
    var count = 0;
        arr.forEach((i)=>{
            if(i == item){
                count ++;
            }
        })
        return count;
    }
    console.log(count([1, 2, 4, 4, 3, 4, 3], 4));    // 结果: 3

    题目描述:

    为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组

    // 9.为数组 arr 中的每个元素求二次方。不要直接修改数组 arr,结果返回新的数组
    function square(arr){
        var newArr = [];
        arr.forEach((item)=>{
            newArr.push(item*item);
        })
        return newArr;
    }
    console.log(square([1, 2, 3, 4]));   // 结果: [1, 4, 9, 16]

    ---------继续奥。(*^▽^*)

    展开全文
  • 定义一个数组,求数组所有元素 #include<stdio.h> int sum_arry(int *p,int n) { int i = 0,sum = 0; for(i=0;i<n;i++) { sum += *(p+i); } return sum; } int main(void) { int a[8]; int i = 0;...

    定义一个数组,求数组所有元素之和

    		#include<stdio.h>
    int sum_arry(int *p,int n)
    {
    int i = 0,sum = 0;
    for(i=0;i<n;i++)
    {
    	sum += *(p+i);
        }
        return sum;
    }
    int main(void)
    {
    int a[8];
    int i = 0;
    printf(“请输入8个数字\n");
    for(i=0;i<8;i++)
    scanf("%d",&a[i]);			     
    printf("a[0]到a[i]的和为%d\n",sum_arry(&a[0],i));
     return 0;
    }
    

    在这里插入图片描述

    展开全文
  • var arr = [1,2,3,4]; function sum(arr){ var totel = 0; for(i=0;i<arr.length;i++){ totel += arr[i]; } console.log(totel); return totel; } sum(arr);
  • 例如定义数组 var =[1,2,3,4,5,6] num=3 返回 0: “1,2,3” 1: “1,2,4” 2: “1,2,5” 3: “1,2,6” 4: “1,3,4” 5: “1,3,5” 6: “1,3,6” 7: “1,4,5” 8: “1,4,6” 9: “1,5,6” 10: “2,3,4” 11: “2,3,5”...
  • 二维数组编写程序定义一个二维数组arr,该数组一共有4行3列,如下表所示,请把下表中的所有对应数据利用赋值语句赋值到该二维数组arr中去arr 第0列第1列第2列第0行第1行第2行第3行编写程序依次把第2行第1列、第0行第...
  • 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值  题目:  如果给定一个数组arr[0,...,N-1],要求找出相邻两个数的最大差值。  对于数XY,如果不存在其他的数组中的数在[x,y]区间内,则X...
  • 【实验1】创建int型数组,存储100以内的偶数,并计算数组所有元素。 public class Client { public static void main(String[] args) { // TODO Auto-generated method s tub int[] arr = new int...
  • 计算数组中重复元素个

    千次阅读 2018-04-15 08:56:22
    * @param valueNum 计算重复数的元素 * */ function isRepeat(result,valueNum){ //判断数组中重复元素的个数 var arr = []; result.sort() for (var i = 0; i &lt; result.length;) { ...
  • using System; using System.Collections.Generic; using System.Linq; using System.Text;... /// 有一个数组,每个元素的值都是实数,请写出求最大元素的值及其位置的算法 /// class Program {
  • 数组里面所有元素以及平均值。 // (1)声明一个求和变量 sum。 // (2)遍历这个数组,把里面每个数组元素加到 sum 里面。 // (3)用求和变量 sum 除以数组的长度就可以得到数组的平均值。 var arr = [2...
  • 先上代码 public static ...同理加入数字定义判断 ,当数组中没有重复出现比较的数字时,运用这种判断方法隔离单一数字不同的输出情况,只保留数字n与数组arr全部不同的这种情况,再输出相关语句.
  • 计算二维数组元素和 class ArrayDemo_2 { public static void main(String[] args) { //计算二维数组元素和 int[][] arr = {{1,2,5},{4,5,6,4},{3,2}}; int sum = 0; for (int x=0; x<arr.length; x...
  • 参数可以认为是线程的次数(计数器)。每次执行完计数器都会减1.直到为0,主线程开始执行。 public class FiveThreadCount { private int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,...
  • 封装一个数组,求数组元素 #include <stdio.h> #define ARRAY_LEN 1000 //数组长度 void createArr (int* arr, int len) { // 录入数组 int i; for (i = 0; i<len; i++) scanf("%d",&arr[i...
  • 求得这个数组所有子集的情况,然后将子集数组的元素个数为k的子数组所有元素求和,判断是否等于target如果等于打印子数组。 代码: int target = 7; void printvector(vector<int> arr) { for (int...
  • /* 最快时间、最小空间复杂度(自己感觉的哈哈哈)计算数组所有元素值之(归并思想) */ int getsum(int arr[], int length) { int interval = 1; int i; while( interval<length ) { for( i=0; i+...
  • 计算给定数组 arr所有元素的总和 输入描述: 数组中的元素均为 Number 类型 //2.计算给定数组 arr所有元素的总和 [ 1, 2, 3, 4 ] function sumFn(arr) { var sum = 0; arr.forEach((item) => { sum +...
  • 习题6.14 以m行n列二维数组为参数进行方法调用,分别计算二维数组各列元素,返回并输出所计算的结果。 代码块: package App; import java.util.*; class Array { int m, n; Scanner reader=new Scanner...
  • 3.编写代码: 实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上.例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6} package gyy; public class yinger1{ public ...
  • var arr=[1,3,4,3,6,8,3,9]; var item=3; var count=0;思路: for(var i=0;i<arr.length;i++){ if(arr[i]==item){ count++; } } console.log(count);或者 var fn=func
  • 2.定义一个方法,传入两个数组,方法中将两个数组不同的元素拼接成一个字符串,并且将该字符串以及字符串的长度输出到控制台上; 如果没有则输出"对不起两个数组所有元素均相同" package it; import java.util....
  • 编程打印一个二维数组所有元素,并打印最大值,最小值(以及它们所在的行号列号) void printResult(int a[][]){......} 输出结果格式: 二维数组所有元素的和是:123 最大值是:15,行号:3
  • 输入:一个数组中某个元素的值 输出:需要计算元素数组中重复出现的个数 let counts = (arr, value) => arr.reduce((a, v) => v === value ? a + 1 : a + 0, 0); console.log('数组counts中"李"出现的...
  • java查找数组arr中第k大的奇数

    千次阅读 2019-12-27 09:27:39
    查找数组arr中第k大的奇数,如果不存在则返回0. (arr[i] > 0 (i>=0)) 计算出时间复杂度(注意代码注释,不要使⽤库函数或脚本中已经实现好的排序算法⼯具, 需要⾃⼰实现数据结构所需要的算法) 当我阅读...
  • 实现一个方法 sum, 以数组为参数, 求数组所有元素 import java.util.Arrays; public class TestDemo { public static int sum(int[] arr){ int sum = 0; for (int x:arr) { sum += x; } return sum; } ...
  • package kkkk; public class Sum { public static void main(String[] args)...int[] arr = {1, 2,3,4,5,6}; System.out.println(sum(arr)); } public static int sum(int[] arr) { int result = 0; for (int i = 0;...
  • if (arr == null || arr.length == 0) { return 0; } int count = 1; int res = 0; while (true) { for (int i = 0; i < arr.length; i++) { if (i + count > arr.length) { continue; } res += fun(ar

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,446
精华内容 34,178
关键字:

计算一个数组arr所有元素的和