LeetCode 刷題-- 數學類

283. 移動零

給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。

示例:

輸入: [0,1,0,3,12]
輸出: [1,3,12,0,0]

    public void moveZeroes(int[] nums) {
      int j = 0;
      //第一遍遍歷,把不爲0的數字都賦值給j
      //第二遍遍歷,把0放在後面
      for(int i = 0; i < nums.length; i++){
          if(nums[i] != 0){
              nums[j] = nums[i];
              j++;
          }
      }
      for(int i = j ; i< nums.length ; i++){
          nums[i] = 0;

      }
          
      }     
}

485. 最大的連續1的個數

給定一個二進制數組, 計算其中最大連續1的個數。

示例 1:

輸入: [1,1,0,1,1,1]
輸出: 3
解釋: 開頭的兩位和最後的三位都是連續1,所以最大連續1的個數是 3.
注意:

輸入的數組只包含 0 和1。
輸入數組的長度是正整數,且不超過 10,000。

class Solution {
    public int findMaxConsecutiveOnes(int[] nums) {
      int count = 0;
      int max= 0;
      for(int j = 0; j < nums.length; j++){
        count = nums[j] == 0? 0 : count +1;
        max = Math.max(count, max);
      }
      return max;
    }
}

287. 尋找重複數

給定一個包含 n + 1 個整數的數組 nums,其數字都在 1 到 n 之間(包括 1 和 n),可知至少存在一個重複的整數。假設只有一個重複的整數,找出這個重複的數。

示例 1:

輸入: [1,3,4,2,2]
輸出: 2
示例 2:

輸入: [3,1,3,4,2]
輸出: 3

class Solution {
    public int findDuplicate(int[] nums) {
        //一個指針負責遍歷
        //另一個指針不動
         Arrays.sort(nums);
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] == nums[i-1]) {
                return nums[i];
            }
        }
       return -1;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章