<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          每日一例 | 數(shù)組的異或操作&數(shù)組的動態(tài)和

          共 6052字,需瀏覽 13分鐘

           ·

          2021-05-19 07:16

          今天時間相比而言比較充裕,所以就做了兩個算法題,當然也是題目比較簡單,兩個題目都是關(guān)于數(shù)組的,接下來,我們一起來看下吧!

          數(shù)組異或操作

          題目描述

          題目基本信息

          題目來源:力扣(leetcode

          題目鏈接:https://leetcode-cn.com/problems/xor-operation-in-an-array/

          題目難度:簡單

          題目描述

          給你兩個整數(shù),n 和 start 。

          數(shù)組 nums 定義為:nums[i] = start + 2*i(下標從 0 開始)且 n == nums.length 。

          請返回 nums 中所有元素按位異或(XOR)后得到的結(jié)果。

          示例 1:
          輸入:n = 5, start = 0
          輸出:8
          解釋:數(shù)組 nums 為 [0, 2, 4, 6, 8],其中 (0 ^ 2 ^ 4 ^ 6 ^ 8) = 8 。
               "^" 為按位異或 XOR 運算符。
          示例 2:
          輸入:n = 4, start = 3
          輸出:8
          解釋:數(shù)組 nums 為 [3, 5, 7, 9],其中 (3 ^ 5 ^ 7 ^ 9) = 8.
          示例 3:
          輸入:n = 1, start = 7
          輸出:7
          示例 4:
          輸入:n = 10, start = 5
          輸出:2
          提示:
          • 1 <= n <= 1000
          • 0 <= start <= 1000
          • n == nums.length

          提交記錄

          這個題目已經(jīng)很簡單了,因為題目描述里面已經(jīng)包含答案了((nums[i] = start + 2*i),我們只需要用代碼把他實現(xiàn)就行了

          第一次提交

          不知道是不是題目太老了,所以提交之后只顯示內(nèi)存方面的提交信息,運行時間詳情不顯示

          class Solution {
              public int xorOperation(int n, int start) {
                  int result = 0;
                  for (int i = 0; i < n; i++) {
                      result ^=  start + 2*i;
                  }
                  return result;
              }
          }

          這個題目我覺得沒有可以優(yōu)化的點,但是在重復提交的過程中,我發(fā)現(xiàn)越提交,內(nèi)存排名越差,代碼還是同一個代碼:

          感覺很魔幻,好了,我們繼續(xù)看第二個問題

          數(shù)組的動態(tài)和

          題目基本信息

          題目來源:力扣(LeetCode) 題目鏈接:https://leetcode-cn.com/problems/running-sum-of-1d-array

          題目難度:簡單

          題目描述

          給你一個數(shù)組 nums。數(shù)組「動態(tài)和」的計算公式為:runningSum[i] = sum(nums[0]…nums[i])。

          請返回 nums的動態(tài)和。

          示例 1:
          輸入:nums = [1,2,3,4]
          輸出:[1,3,6,10]
          解釋:動態(tài)和計算過程為 [1, 1+2, 1+2+3, 1+2+3+4] 。
          示例 2:
          輸入:nums = [1,1,1,1,1]
          輸出:[1,2,3,4,5]
          解釋:動態(tài)和計算過程為 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
          示例 3:
          輸入:nums = [3,1,2,10,1]
          輸出:[3,4,6,16,17]
          提示:
          • 1 <= nums.length <= 1000
          • -10^6 <= nums[i] <= 10^6

          提交記錄

          這個題目同樣也很簡單,解題思路題目也告訴你了,我們只需要循環(huán)遍歷就可以了

          第一次提交

          第一次的提交我定義了一個result,用于接收前面元素的和,定義了results數(shù)組用于存放返回結(jié)果:

          class Solution {
              public int[] runningSum(int[] nums) {
                  int result = 0;
                  int[] results = new int[nums.length];
                  for (int i = 0; i < nums.length; i++) {
                      if (i == 0) {
                          result = 0;
                      } else {
                          result = results[i - 1];
                      }
                      results[i] = result + nums[i];
                  }
                  return results;
              }
          }

          時間方面表現(xiàn)很優(yōu)秀,內(nèi)存也尚可:

          第二次提交

          第二次我去掉了中間變量,其他的基本沒變

          class Solution {
              public int[] runningSum(int[] nums) {
                  int[] results = new int[nums.length];
                  for (int i = 0; i < nums.length; i++) {
                      if (i == 0) {
                           results[i] = nums[i];
                      } else {
                          results[i] = results[i - 1] + nums[i];
                      }
                      
                  }
                  return results;
              }
          }

          但這一次,相比于第一次,內(nèi)存方面表現(xiàn)更優(yōu)秀了:

          第三次提交

          根據(jù)第二次的優(yōu)化經(jīng)驗,這次我想再去掉一個變量,去掉了results數(shù)組:

          class Solution {
              public int[] runningSum(int[] nums) {
                  for (int i = 0; i < nums.length; i++) {
                      if (i != 0) {
                          nums[i] = nums[i - 1] + nums[i];
                      }            
                  }
                  return nums;
              }
          }

          但是這時候,性能不勝反而降低了,運行時間上依然優(yōu)秀,但是內(nèi)存上變差了,從38.3MB變成了38.4MB

          但是我在重復多次提交的之后,它竟然性能又變好了:

          這個就很魔幻,提交過程中還有變成38.5Mb的情況。當然,可能系統(tǒng)在檢測運行內(nèi)存的時候有一定的誤差,只要你的性能差異不是很大,多執(zhí)行幾次,數(shù)據(jù)應該就比較穩(wěn)定了。

          總結(jié)

          今天的兩個算法題目都是有關(guān)數(shù)組的,題目比較簡單,但第一次提交之后還是有一定的優(yōu)化空間,這也就從側(cè)面反映出一個問題,任何系統(tǒng)在第一次構(gòu)建的時候都不可能特別完美,所以在系統(tǒng)升級迭代的過程中,我們要盡可能優(yōu)化調(diào)整,讓系統(tǒng)能夠越來越優(yōu)秀,性能越來越好。

          這個就像我們小時候?qū)懽魑囊粯?,第一次寫完,再回過頭看的時候,還是會發(fā)現(xiàn)有很多病句和錯別字,或者會想到更好的句子或者表達方式,然后經(jīng)過你的不斷修改潤色,最后你的作文會越來越好看,越來越優(yōu)秀。如果再繼續(xù)類比的話,你會發(fā)現(xiàn)開發(fā)本身就和寫作文一樣,你要寫出好作文,你就要多閱讀,多積累,多寫,這樣你的經(jīng)驗會越來越豐富,寫的東西會越來越好。程序開發(fā)也是一種創(chuàng)作,你需要積累,需要閱讀優(yōu)秀的代碼,需要不斷練習,然后你才能寫出更優(yōu)秀的代碼。

          當然,有一點我也認同的,文字的意義在于表達,表達是目的,文字只是工具,不應該為了讓文章更漂亮,刻意堆疊華麗的辭藻,這樣就本末倒置了,用問號白居易的話說就是"文章合為時而著歌詩合為事而作",任何脫離了表達的文字都是沒有意義的。寫代碼也是如此,技術(shù)服務于業(yè)務,技術(shù)以業(yè)務為中心,不能僅為了用各種高大上的牛逼技術(shù)而忽略了業(yè)務本身,任何脫離了業(yè)務的代碼也是沒有意義的。

          - END -


          瀏覽 42
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉大香蕉大香蕉 | 超碰国内自拍 | 偷拍自拍视频网址 | 中文字幕在线播放第二页 | 性爱激情五月 |