<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            生態文明你我共建征文

            時間:2025-08-24 02:47:14 初二作文 我要投稿

            2017年生態文明你我共建征文

              1.給出一個有序數組啊,長度為len,另外給出第三個數X,問是否能在數組中找到兩個數,這兩個數之和等于第三個數X。

            2017年生態文明你我共建征文

              我們首先看到第一句話,這個數組是有序的,所以,我們可以定義兩個指針,一個指向數組的第一個元素,另一個指向應該指向的位置(這個需要看具體的實現和數組給定的值),首先計算兩個位置的和是否等于給定的第三個數,如果等于則算法結束,如果大于,則尾指針向頭指針方向移動,如果小于,則頭指針向尾指針方向移動,當頭指針大于等于尾指針時算法結束,沒有找到這樣的兩個數。

              解法一:

              #include

              int judge(int *a, int len, int k, int *num1, int *num2);

              int main(int argc, char **argv)

              {

              int test_array[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};

              int result = -1;

              int num1, num2;

              result = judge(test_array, sizeof(test_array) / sizeof(int), 12, &num1, &num2);

              if(result == 0)

              {

              printf("%d\t%d\n", num1, num2);

              }

              else if(result == -1)

              {

              printf("can't find");

              }

              else

              {

              printf("error");

              }

              }

              int judge(int *a, int len, int k, int *num1, int *num2)

              {

              int *low = NULL;

              int *high = NULL;

              int i = 0;

              int result = -1;

              if(a == NULL || len < 2)

              {

              return result;

              }

              if(a[0] >= k)

              {

              return result;

              }

              while(a[i] <= k && i < len)

              {

              i++;

              }

              low = a;

              high = a + i - 1;

              while(low < high)

              {

              *num1 = *low;

              *num2 = *high;

              if((*low + *high) == k)

              {

              result = 0;

              break;

              }

              else if((*low + *high) > k)

              {

              high--;

              }

              else if((*low + *high) < k)

              {

              low++;

              }

              }

              return result;

              }

              解法二:

              #include

              using namespace std;

              int hash_table[100];

              bool judge(int *a, int len, int x)

              {

              memset(hash_table, 0, sizeof(hash_table));

              for (int i=0; i

              {

              hash_table[x - a[i]] = 1;

              }

              for (int i=0; i

              {

              if (hash_table[i] == 1)

              {

              return true;

              }

              }

              return false;

              }

              int main()

              {

              int len = 10;

              int a[10] = {1, 3, 5, 7, 9, 4, 2, 8, 10, 6};

              int x = 19;

              if (judge(a, len, x))

              {

              cout<<"Yes"<

              }

              else

              {

              cout<<"No"<

              }

              system("pause");

              return 0;

              }

              本題解決方法:hash table。

              時間復雜度:O(N)

              空間復雜度:O(N)

              2.給定有n個數的數組a,其中有超過一半的數為一個定值,在不進行排序,不開設額外數組的情況下,以最高效的算法找出這個數。

              int find(int* a, int n);

              #include

              using namespace std;

              int find(int *a, int n)

              {

              int t = a[0];

              int count = 0;

              for (int i=0; i

              {

              if (count == 0)

              {

              t = a[i];

              count = 1;

              continue;

              }

              else

              {

              if (a[i] == t)

              {

              count++;

              }

              else

              {

              count--;

              }

              }

              }

              return t;

              }

              int main()

              {

              int n = 10;

              int a[10] = {1, 3, 2, 3, 3, 4, 3, 3, 3, 6};

              cout<

              system("pause");

              return 0;

              }

              Time Complexity: O(n)

              Space Complexity:O(1)

            【生態文明你我共建征文】相關文章:

            最新生態文明你我共建征文23篇01-06

            生態文明你我共建的作文通用07-29

            生態文明你我共建優秀作文07-11

            守護你我的生態文明作文06-05

            共建生態文明,共享綠色未來的作文03-09

            (薦)共建生態文明,共享綠色未來的作文05-08

            弘揚生態文明共建綠色校園的800字作文07-22

            共建生態文明,共享綠色未來作文1000字06-16

            生態文明從我做起征文600字08-09

            (熱)共建生態文明,共享綠色未來作文1000字23篇09-10

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看