<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 生態文明你我共建征文

    時間: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

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人