精华内容
下载资源
问答
  • 寻找数组中不相同元素的个数

    千次阅读 2016-04-20 21:19:48
    题意:一个整数数组,计算该数组中不相同整数的个数。 如A[]={1,8,2,6,7,8,5,5,4}则输出不相同的个数为7. 方法一是使用hash数组,将hash数组里面的数全部制为0;然后hash[A[i]]为0时,将其设置为1;最后hash数组的...
    题意:一个整数数组,计算该数组中不相同整数的个数。
    如A[]={1,8,2,6,7,8,5,5,4}则输出不相同的个数为7.
    方法一是使用hash数组,将hash数组里面的数全部制为0;然后hash[A[i]]为0时,将其设置为1;最后hash数组的和就是不同数字的数目。

    此种方法的缺点就是只能适合整形数组,其他数组不适合;但是优点就是时间复杂度小,只有O(n)。


    方法二:先进行从小到大排序,然后逐个比较相互之间是否相等;缺点是时间复杂度O(n*n);优点是不近能计算整数数组对于浮点数以及字符数组也适用;

    代码如下:

    #include <iostream>
    using namespace std;
    int method1(int A[],int length)
    {
        int i,j;
     //   length=sizeof(A)/sizeof(int);
        int max_A=A[0];
    
        for(i=0;i<length;++i)
        {
           if(max_A<A[i])
                max_A=A[i];
        }
        max_A++;
        int hashnum[max_A];
        for(i=0;i<max_A;++i)
            hashnum[i]=0;
        for(i=0;i<length;++i)
        {
           if(hashnum[A[i]]==0)
           {
              hashnum[A[i]]=1;
           }
        }
        int sum=0;
        for(i=0;i<max_A;++i)
           sum=sum+hashnum[i];
        return sum;
    }
    
    void method2(int A[],int length)
    {
        int i,j,temp;
        bool flag;
        for(i=length-1;i>0;--i)
        {
            flag=true;
            for(j=0;j<i;++j)
            {
               if(A[j]>A[j+1])
               {
                   temp=A[j];
                   A[j]=A[j+1];
                   A[j+1]=temp;
                   flag=false;
               }
            }
            if(flag)   //说明排序已经结束
             break;
        }
        int counts=1;
        for(i=0,j=1;j<length;++i,++j)
        {
            if(A[i]!=A[j])
                counts++;
        }
        cout<<counts;
    }
    
    void method3()
    {
     //   string input="hello world";
        string input="today is wednesday";
        char a;
        int i,j,length;
        length=input.size();
        for(i=length-1;i>0;--i)
        {
          for(j=0;j<i;++j)
          {
            if(input[j]>input[j+1])
            {
                a=input[j];
                input[j]=input[j+1];
                input[j+1]=a;
            }
          }
        }
        int counts=1;
        for(i=0,j=1;j<length;++i,++j)
        {
            if(input[i]!=input[j])
                ++counts;
        }
        cout<<counts;
     //   cout<<input;
    }
    int main()
    {
        int A[]={1,8,2,6,7,8,5,5,4,0,9,9};
        int result,length;
        length=sizeof(A)/sizeof(int);
        result=method1(A,length);
        cout<<result<<endl;
        method2(A,length);
        cout<<endl;
        method3();              //计算字符串中不同字符的个数
        return 0;
    }
    
    运行结果如下:



    在上述代码中,method1,method2分别对应的是方法1和方法2,method3是数组为字符串的情况。

    遇到的问题:

    对于形参为数组明的时候,若数组不是字符串,则不能在所在函数中通过形参的函数名求得数组的长度:

      length=sizeof(A)/sizeof(int);
    在method1中,通过上述代码求得的length为1,并不是数组正在的长度。因此当数组为非字符串时,最好连带数组长度一起传递给函数。

    其他:对于冒泡排序来说,可以在一层循环内,二层循环外设置标记blog;当blog值不改变时,这认为二层循环的if语句没有执行,这说明数组已经有序,即可跳出循环:

    for(i=length-1;i>0;--i)
        {
            flag=true;
            for(j=0;j<i;++j)
            {
               if(A[j]>A[j+1])
               {
                   temp=A[j];
                   A[j]=A[j+1];
                   A[j+1]=temp;
                   flag=false;
               }
            }
            if(flag)   //说明排序已经结束
             break;
        }

    2016.04.20



    展开全文
  • 要求将以上数组中为0的元素去掉,将不为0的值存入一个新数组,生成新的数组作为返回值: int[] newArr={1,13,45,5,16,6,25,4,17,6,7,15}; 思路: 遍历一次 把不为零的元算一遍 计算有多少个不为零的数 定义一个新...

    数组 从数组中去掉元素为0的数组

    需求:定义一个整型数组,将数组中的0去掉后返回一个新数组。

    例如:数组为 int[] arr={1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15}; 要求将以上数组中为0的元素去掉,将不为0的值存入一个新数组,生成新的数组作为返回值: int[] newArr={1,13,45,5,16,6,25,4,17,6,7,15};

    思路:
    • 遍历一次 把不为零的元算一遍 计算有多少个不为零的数
    • 定义一个新数组 长度为不为零的元素的个数
    • 再遍历一次 把不为零的元素 遍历赋值给新数组
    • 打印出新数组
    用到的知识点:
    • 数组的遍历
    • 定义并动态初始化数组
    • 遍历赋值给新数组
    代码如下:
    package com.cen.Homework.day04;
    
    import java.util.Arrays;
    
    public class StatisticsDemo3 {
        public static void main(String[] args) {
    
            //定义sum来接收不为零的元素个数是多少
            int sum = 0;      
            //int ele = 0;
            int i;
            //定义数组并初始化和赋值
            int[] arr = {1, 13, 45, 5, 0, 0, 16, 6, 0, 25, 4, 17, 6, 7, 0, 15};
            //遍历一次  有元素不为零的时候sum+1;直到遍历结束
            for (i = 0; i < arr.length; i++) {
    		//	定义 lel来接收arr的所有元素
                int lel = arr[i];
                //判断
                if (arr[i] == 0) {
                    continue;
                } else {
                    sum++;
    //                ele = arr[i];
                }
            }
    
            int newArr [] = new int [sum];
    
            int count = 0;
            for (int j = 0; j < arr.length; j++) {
                int a = arr[j];
                    if(a != 0){
                        newArr[count] = a;
                        count++;
                    }
    
            }
            System.out.println(Arrays.toString(newArr));
            System.out.println(java.util.Arrays.newArr);
        }
        
        //方法二
         /**   public static void main(String[] args) {
                int[] arr=new int[]{1,13,45,5,0,0,16,6,0,25,4,17,6,7,0,15};
                int length = 0; //新数组长度
                int count = 0;//记录新数组当前位置
                for (int i = 0; i < arr.length; i++) {  //统计数组中元素不为0的元素个数length
                    if (arr[i] != 0){
                        length++;
                    }
                }
                //将上面统计得到的length作为新数组的长度
                int[] ints = new int[length];
                //遍历原数组,将不为0的元素添加到新数组中
                for(int a:arr){
                    if (a!=0){
                        ints[count] = a;
                        count++;
                    }
                }
    //        for(int i:ints){
    //            System.out.print(i + " ");
    //        }
                System.out.println(Arrays.toString(ints));
            }
            **/
    }
    
    

    运行结果为:
    在这里插入图片描述

    展开全文
  • 下面以统计连续0的个数为例(统计连续1的个数只需取反操作即可),对于如下数组:我们要统计其中连续0出现的次数,很容易观察出是1,1,1,3。那我们如何通过循环快速获得结果呢?不妨看看如下提示难发现,累加...

    有时,我们需要统计数组中连续的0/1的个数,或者矩阵中每一行或列中连续0/1的个数,传统方法需要使用两层循环来实现,对于matlab而言太不高效了,有木有又简便又高效的方法呢?
    下面以统计连续0的个数为例(统计连续1的个数只需取反操作即可),对于如下数组:

    这里写图片描述

    我们要统计其中连续0出现的次数,很容易观察出是1,1,1,3。那我们如何不通过循环快速获得结果呢?不妨看看如下提示

    这里写图片描述

    不难发现,累加数组(cumsum的结果数组)的每一项是原始数组前n项的累加和。既然如此,如果原始数组中第n项为0,那前n项和前n-1项的累加和应该相等才对。而且结果确实如此。
    由此不难想出,统计连续0的个数,间接转换成了统计累加数组中每个值出现的频数减一。这里使用tabulate函数,具体用法可在matlab命令窗口中doc tabulate。

    这里写图片描述

    这里写图片描述

    即可获得结果预期结果。
    如果我们要快速获得出现次数最多的连续0的个数,还有更简便的方法

    这里写图片描述

    原理与上面相似,mode只输出出现频率最高的数字及其出现的次数。

    但该方法有一点需要注意,就是待统计数字出现在数组开头时,会出现1的误差。

    这里写图片描述

    我们在原始数组a的基础上,在头部增加了两个0,得到数组b,预期结果变成了2,1,1,1,3。但按照刚才的方法结果却变成了1,1,1,1,3。具体原因也很好理解,大家查看中间结果就可以明白。
    为了避免这种问题,我们可只需在数组b的头部加入一个0即可。

    这里写图片描述

    同时,也不会影响原始数组a的结果

    这里写图片描述

    当数组切换成矩阵时,也可以进行上述操作中的mode操作(tabulate操作只支持向量),即可统计出每一列中连续0的个数

    这里写图片描述

    展开全文
  • 什么80%码农都做了架构师?>>> ...

    问题:

    In the computer world, use restricted resource you have to generate maximum benefit is what we always want to pursue.

    For now, suppose you are a dominator of m 0s and n 1s respectively. On the other hand, there is an array with strings consisting of only 0s and 1s.

    Now your task is to find the maximum number of strings that you can form with given m 0s and n 1s. Each 0 and 1 can be used at most once.

    Note:

    1. The given numbers of 0s and 1s will both not exceed 100
    2. The size of given string array won't exceed 600.

    Example 1:

    Input: Array = {"10", "0001", "111001", "1", "0"}, m = 5, n = 3
    Output: 4
    Explanation: This are totally 4 strings can be formed by the using of 5 0s and 3 1s, which are “10,”0001”,”1”,”0”

    Example 2:

    Input: Array = {"10", "0", "1"}, m = 1, n = 1
    Output: 2
    Explanation: You could form "10", but then you'd have nothing left. Better form "0" and "1".

    解决:

    ① 这道题是一道典型的应用DP来解的题,如果我们看到这种求总数,而不是列出所有情况的题,十有八九都是用DP来解,重中之重就是在于找出递推式。

    建立一个二维的DP数组,其中dp[i][j]表示有i个0和j个1时能组成的最多字符串的个数,而对于当前遍历到的字符串,我们统计出其中0和1的个数为zeros和ones,然后dp[i - zeros][j - ones]表示当前的i和j减去zeros和ones之前能拼成字符串的个数,那么加上当前的zeros和ones就是当前dp[i][j]可以达到的个数,我们跟其原有数值对比取较大值即可,所以递推式如下:

    dp[i][j] = max(dp[i][j], dp[i - zeros][j - ones] + 1);

    class Solution { //34ms
        public int findMaxForm(String[] strs, int m, int n) {
            int[][] dp = new int[m + 1][n + 1];
            for (String str : strs){
                int zeros = 0;
                int ones = 0;
                for (char c : str.toCharArray()){
                    if (c == '0'){
                        zeros ++;
                    }else {
                        ones ++;
                    }
                }
                for (int i = m;i >= zeros;i --){
                    for (int j = n;j >= ones;j --){
                        dp[i][j] = Math.max(dp[i][j],dp[i - zeros][j - ones] + 1);
                    }
                }
            }
            return dp[m][n];
        }
    }

    转载于:https://my.oschina.net/liyurong/blog/1603312

    展开全文
  • **字符数组中第一个元素为非空字符。 #include<stdio.h> #define n 100 int main() { char a[n];...='\0') { //该段文字不为空串 if(a[0]!=' ') { //第一个字符不是空格 number=1; } fo
  • 这是一道最长子序列题,子序列中每一个数在原序列中不一定是相邻,这一点要注意,用dp 解决,用dp[i]记录最后一个数字nums[i]最长子序列长度,用count[i]记录最后一个数字nums[i]最长子序列个数, ...
  • 一、面试题问:有一个长度 100 的数组,如何从中随机挑选 50 个元素,组成一个新的数组?答:这个...那个...emmmmmm问:那先挑 50 个,就挑一个数,知道怎么做吗?答:这个我知道!随机生成一个 0 ~ 99 数,...
  • 今天写代码过程中遇到一个需求,计算一个list中数值为1的元素的个数,其中这个list的元素数值不是为0就是为1。 一开始想到的是写个方法来计算: # 返回一个0,1数组中1的数量 def num_one(source_array): count = 0...
  • /** ... * 绝对值不同的数的个数为5,因为其中有5个不同的绝对值: 0, 1, 3, 5, 6 请返回给定有序数组中绝对值不同的数的个数. 要求: 文件名: * AbsDistinct.java,方法名: static public int ab...
  • LeetCode-【数组】-有效三角形的个数

    千次阅读 2018-08-27 20:37:30
    给定一个包含非负整数的数组,你任务是统计其中可以组成三角形三条边三元组个数。... 数组里整数范围 [0, 1000]。 题解:要想构成三角形,只需三角形两条最短边之和大于最长边即可。 基于这样...
  • 想法由来今天写代码过程中遇到一个需求,计算一个list中数值为1的元素的个数,其中这个list的元素数值不是为0就是为1。一开始想到的是写个方法来计算:# 返回一个0,1数组中1的数量def num_one(source_array):count =...
  • 请编写函数fun,它的功能是:求出能整除形参x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 例如,若 x 中的值: 35,则有 4 个数符合要求,它们是: 1, 5, 7, 35 #...
  • 3.请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。 例如,若x中的值30,则有4个数符合要求,...
  • 想法由来今天写代码过程中遇到一个需求,计算一个list中数值为1的元素的个数,其中这个list的元素数值不是为0就是为1。一开始想到的是写个方法来计算:# 返回一个0,1数组中1的数量def num_one(source_array):count =...
  • 如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。举个例子:...
  • System.out.println("0的个数n:"+n); shuchu(shuzu); } public static int find (int []group){ for(int i=0;i;i++){ int n=0; if(group[i]==0){ group[i]=1; n++; } } return n; ...
  • 要求将以上数组中的0项去掉,将不为0的值存入一个新的数组;思路:这里需要定义一个新的数组,定义新数组需要知道数组的长度,长度是 旧数组的长度 减去旧数组中0的元素的个数;所以我们首先要获取旧数组的中0元素...
  • 【算法】【数组】删除数组中所有值x的数据元素题目算法一算法二算法三 题目 删除数组中所有值x的数据元素 算法一 思路:统计等于x的个数 时间复杂度:O(n)O(n)O(n) 空间复杂度:O(1)O(1)O(1) //算法一:...
  • 数组中重复数字

    2019-07-23 20:35:06
    数组中某些数字是重复,但知道有几个数字是重复。也知道每个数字重复几次。请找出数组中任意一个重复数字。 例如,如果输入长度7数组{2,3,1,0,2,5,3},那么对应输出是第一个重复数字2。 思路:...
  • python实现找出数组中出现奇数次数题目描述:数组中有N+2个数, 其中, N个数出现了偶数次, 2个数出现了奇数次(这两个数相等〉,请用 0(1)空间复杂度,找出这两个数 。 注意 : 需要知道具体位置,只需要找出...
  • Java中的数组

    2021-02-03 20:09:59
    Java中的数组 数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个...可变性:数组一旦初始化,则长度(数组中元素的个数可变。 数值型数组元素默认值为0,而引用元素的默认值为null;数组的索
  • 首先,有时用数组时,...声明数组时能指定其长度(数组中元素的个数),Java中使用关键字new创建数组对象,格式:数组名 = new 数组元素的类型 [数组元素的个数]int[] s = new int[5];//s = new int[5] ;s[0] = 1...
  • 你可以随意把整个数组切成若干个相容的子数组,求异或和为0的子数组最多可能有多少个?整数异或和定义:把数组中所有的数异或起来得到的值。 输入描述: 输出包括两行,第一行一个整数,代表数组长度n。第二行有n个...
  • 思路:已知一个含有重复数字无序数组,还有一个整数k,找出有多少对不重复数对(i, j)使得i和j差刚好为k。由于k有可能为0,而只有含有至少两个...如果k不为0,且用当前数字加上k后得到新数字也在数组中存在,...
  • 获取第一个数组array1中出现,而在第二个数组array2中没有出现元素 思路 ...外层遍历array1和内层遍历array2如果Boolean真表示重复,然后加到新数组中 // 4.遍历新数组,发现只剩下未重复元素 自
  • 二维数组转换稀疏数组 /** * 二维数组转换稀疏数组思路: ...将二维数组有效数据放入稀疏数组中 * 0 0 0 1 0 * 2 0 0 0 3 * 0 5 0 0 0 * 0 0 6 0 0 * */ //创建一个原始4行5列二维数组 int
  • 题目描述数组中有一个数字出现的次数超过数组长度的一半...解题思路及代码方法一:哈希法基本思想是使用 map 来记录每个元素出现的个数,然后再遍历一次数组,找出这个众数。代码如下:class Solution { public: i...
  • java数组去掉0,把非0元素存新数组

    千次阅读 2016-10-17 13:20:54
     要求将以上数组中的0项去掉,将不为0的值存入一个新的数组; 思路:这里需要定义一个新的数组,定义新数组需要知道数组的长度, 长度是 旧数组的长度 减去旧数组中0的元素的个数; 所以我们首先要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 824
精华内容 329
关键字:

数组中不为0的个数