zoukankan      html  css  js  c++  java
  • 4 数组

    1 一维数组即为线性表,二维数组可以定义为“其数据元素为一维数组”的线性表。

    1.1 查找多数元素:假设一个数组中多数元素存在,找出数组中占50%以上的元素。

    算法思想:每找出两个不同的element,就成对删除,最终剩下的一定就是所求的。

     1 public static int majorityElement(int[] nums)
     2 {
     3     int element = 0;
     4     int count = 0;
     5     for(int i = 0; i < nums.length; i++)
     6     {
     7         if(count == 0)
     8         {
     9             element = nums[i];
    10             count = 1;
    11         }
    12         else
    13         {
    14             if(element == nums[i])
    15                 count++;
    16             else
    17                 count--;
    18         }
    19     }
    20     return element;
    21 }
    算法描述

    1.2 把数组排成最小数:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

    例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    算法思想 将数组转换为String数组,在新规则下对数组进行排序(本例使用了选择排序)。

     1 public static String PrintMinNumber(int[] num)
     2 {
     3     if(num == null || num.length == 0)
     4         return "";
     5     int n = num.length;
     6     String[] s = new String[n];
     7     for(int i = 0; i < n; i++)
     8         s[i] = String.valueOf(num[i]);
     9     for(int i = 0; i < s.length; i++)
    10     {
    11         int k = i;
    12         for(int j = i + 1; j < s.length; j++)
    13             if(compare(s[k], s[j]))    k = j;
    14         if(k != i)
    15         {
    16             String x = s[i];
    17             s[i] = s[k];
    18             s[k] = x;
    19         }
    20     }
    21     StringBuilder sb = new StringBuilder();
    22     for(int i = 0; i < s.length; i++)
    23         sb = sb.append(s[i]);
    24     return sb.toString();
    25 }
    26 private static boolean compare(String s1, String s2)
    27 {
    28     int n = s1.length() + s2.length();
    29     String str1 = s1 + s2;
    30     String str2 = s2 + s1;
    31     for(int i = 0; i < n; i++)
    32     {
    33         if(Integer.parseInt(str1.substring(i, i + 1)) > Integer.parseInt(str2.substring(i, i + 1)))
    34             return true;
    35         if(Integer.parseInt(str1.substring(i, i + 1)) < Integer.parseInt(str2.substring(i, i + 1)))
    36             return false;
    37     }
    38     return false;
    39 }
    算法描述
  • 相关阅读:
    梦断代码阅读笔记之三
    梦断代码阅读笔记二
    输入法评价
    1的个数
    团队冲刺-10
    第一阶段个人总结03
    第一阶段个人总结02
    第一阶段个人总结01
    学习进度条第十周
    学习进度条第九周
  • 原文地址:https://www.cnblogs.com/sketeton/p/11688834.html
Copyright © 2011-2022 走看看