給你代碼:leetcode隨筆

2021-01-11 鯤圭雲計算

1281. 整數的各位積和之差

給你一個整數

n

,請你幫忙計算並返回該整數「各位數字之積」與「各位數字之和」的差。

example 1:

輸入:n = 234

輸出:15

解釋:

各位數之積 = 2 * 3 * 4 = 24

各位數之和 = 2 + 3 + 4 = 9

結果 = 24 - 9 = 15

來源:力扣(LeetCode)

這題非常簡單。只要轉換一下字符串就可以做。無非就是遍歷一遍進行累加還有累乘。

/**

* @param {number} n

* @return {number} */

var subtractProductAndSum = function(n) {

const N = String(n);

let sum = 0;

let reduce = 1;

for (let i = 0; i < N.length; i++) {

sum += Number(N[i]);

reduce *= Number(N[i]);

}

return reduce - sum;

};

1287. 有序數組中出現次數超過25%的元素

給你一個非遞減的 有序 整數數組,已知這個數組中恰好有一個整數,它的出現次數超過數組元素總數的 25%。

請你找到並返回這個整數

example 1 :

輸入:arr =[1,2,2,6,6,6,6,7,10]輸出:6

來源:力扣(LeetCode)

這題也不難。因為他給的數據是排序過的,所以只要判斷上一個出現的元素和當前元素是否相等就可以了,當超過長度的1/4跳出循環就可以了,當上一個元素和當前元素不相等並且循環還沒跳出,把計數器還原為1從頭開始計時。值得注意的是,不要忘了只有一個元素這個情況。

/**

* @param {number[]} arr

* @return {number}

*/

var findSpecialInteger = function(arr) {

let last = arr[0], count = 1;

if (arr.length === 1) {

return last;

}

for (let i = 1; i < arr.length; i++) {

if (last === arr[i]) {

count += 1;

if (count > arr.length/4) {

return arr[i]

}

} else {

count = 1;

}

last = arr[i];

}

};

小程序組件Behavior屬性覆蓋舉例

根據微信官方文檔,欄位覆蓋是有一定規則的。

根據官方文檔如果是proerties屬性或者方法,那麼組件之中的會覆蓋Behavior中的,Bahavior自身中的則是後面的覆蓋前面的。

而如果是數據data,目標是對象是會被合併,其他類型就會相互覆蓋。

好了看到這,我就鬱悶了,這所謂的相互覆蓋是什麼意思?

我就舉個例子吧

//如下有一個Behavior

module.exports = Behavior({

properties: {

abc: {

type: Array,

value: [1]

}

},

data: {

cba: ['ch'],

cbaO: { a : 1 },

}

})

//如下有個組件應用了這個Behavior

Component({

behaviors: [...],

/**

* 組件的初始數據

*/

data: {

cba: { y: 2 }, // 測試 ['ch2'], 1, '1312'

cbaO: { b: 1 }

},

attached: function () {

//列印變量

}

})

可以看出:組件cbaO和behavior cbaO是會被合併,就是類似Object.assign。嗯,表現正常。

而cba則會變成 behavior裡面的東西。如果組件裡面的 cba變成['ch2'],則又會變成組件裡的東西,我如果換成字符串或者數字,依舊是組件裡的data覆蓋behavior裡面的data。我又測試了如果Behavior裡面的data是對象的情況,情況也一樣。

得出結論:所謂的相互覆蓋,就是有一個如果是對象,則會被另一個代替掉。如果2個都不是對象,那麼按組件的來。

我後來又新建一個組件也應用了這個Behavior,發現如果組件的data欄位裡有一個對象也叫cbaO,那麼他們會共享這個屬性,也就是說即使這樣

cbaO:{}

像這給出一個空對象,他列印的就是之前那個組件一樣的cbaO,可以說變量被汙染了,當然這個對象裡面如果有同名的鍵名則會優先本組件。

這應該是微信方面的bug,從他們的設計角度,組件裡的behavior是和組件裡的data共享的。但是不同組件實例引用同一個behavior,bahavior裡面的data是不能在幾個不同的組件之間共享的。

給你代碼往期回顧:

暴走狀態!小程序用戶UnionID的獲取及登錄狀態維護——給你代碼

給你代碼:leetcode題目加小技巧

給你代碼:小程序內容滾動與導航欄自動高亮聯動

相關焦點

  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • LeetCode刷題第三周【數組(簡單)】
    合併兩個有序數組[5]題目要求:給你兩個有序整數數組 nums1 和 nums2,請你將 nums2 合併到 nums1 中,使 nums1 成為一個有序數組。初始化 nums1 和 nums2 的元素數量分別為 m 和 n 。你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來保存 nums2 中的元素。
  • 每天一道leetcode234-回文鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.6號打卡明天的題目:https://leetcode-cn.com/problems/remove-linked-list-elements/以後明天的題目提取公布一下哈,因為有些朋友想提前做一下~題目 leetcode234-回文鍊表中文連結:https
  • 每天一道leetcode56-合併區間
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.13號打卡明天的題目:https://leetcode-cn.com/problems/minimum-path-sum/descrip題目 每天一道leetcode56
  • LeetCode面試系列 第6天:No.9 - 迴文數
    迴文數https://leetcode-cn.com/problems/palindrome-number/題目描述判斷一個整數是否是迴文數。迴文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。
  • [LeetCode] 912. Sort an Array 數組排序
    Colors,建立一個大小為 100001 的數組 count,然後統計 nums 中每個數字出現的個數,然後再從0遍歷到 100000,對於每個遍歷到的數字i,若個數不為0,則加入 count 數組中對應個數的 i-50000 到結果數組中,這裡的 50000 是 offset,因為數組下標不能為負數,在開始統計個數的時候,每個數字都加上了 50000,那麼最後組成有序數組的時候就要減去,參見代碼如下
  • LeetCode數組類知識點&題型總結
    leetcode第一題就是two-sum,對於這類題目,首先看題目要求的時間複雜度和空間複雜度是什麼,其次看有沒有限制條件,如要求不能有重複的子數組或者要求按照升序/降序排列等。解法如下:Leetcode中包含該類型的題目:序號題目難度代碼1Two Sumeasypython、java、c++167Two Sum II-Input array is sortedeasypython、java、c++153Summediumpython、java、c++163Sum Closetmediumpython、java、c++2593Sum
  • [LeetCode] 976. Largest Perimeter Triangle 最大周長的三角形
    這裡就先給數組排個序,然後從末尾開始,每次取出三個數字,先檢測能否組成三角形,可以的話直接返回周長,不行的話就繼續往前取,若都不行的話,就返回0,參見代碼如下:class Solution {public: int largestPerimeter(vector<int>& A) { sort(A.begin(
  • 數據結構與算法:05 Leetcode同步練習(一)
    你可以假設每種輸入只會對應一個答案。但是,你不能重複利用這個數組中同樣的元素。你不需要考慮數組中超出新長度後面的元素。你不需要考慮數組中超出新長度後面的元素。參考代碼:思路:利用暴力算法。參考代碼:思路:利用排序的方法。
  • LeetCode-38.外觀數列(Count and Say)
    來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/count-and-say/Link:https://leetcode.com/problems/count-and-say/模擬法第N個數是對第N - 1個數的外觀描述。
  • Leetcode刷題No.234
    https://leetcode-cn.com/problems/palindrome-linked-list其次要考慮奇數個節點和偶數個節點的情況,我的解決方法是在紙上將兩種可能性都畫出來,然後再寫代碼,這樣會一口氣寫對。下面我可以給示例代碼。
  • [LeetCode] 996. Number of Squareful Arrays 平方數組的個數
    後面就是經典的遞歸部分了,注意之後需要還原狀態,參見代碼如下:解法一:class Solution {public: int numSquarefulPerms(vector<int>& A) { int res = 0; vector<int> visited(A.size
  • LeetCode-89.格雷編碼(Gray Code)
    即使有多個不同答案,你也只需要返回其中一種。格雷編碼序列必須以 0 開頭。示例 1:輸入: 2輸出: [0,1,3,2]解釋:00 - 001 - 111 - 310 - 2對於給定的 n,其格雷編碼序列並不唯一。例如,[0,2,3,1] 也是一個有效的格雷編碼序列。
  • [LeetCode] 923. 3Sum With Multiplicity 三數之和的多種情況
    完事之後j要加上 left,k要減去 right,最終別忘了 res 要對超大數取餘,參見代碼如下:解法一:class Solution {public: int threeSumMulti(vector<int>& A, int target) { long res =
  • LeetCode-50.求X的N次方(Pow(x, n))
    來源:力扣(LeetCode)連結:https://leetcode-cn.com/problems/powx-n/Link:https://leetcode.com/problems/powx-n/暴力破解O(N)for循環一個個乘class Solution:
  • leetcode - 可以形成最大正方形的矩形數目
    題意給你一個數組 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 個矩形的長度為 li、寬度為 wi。如果存在 k同時滿足 k <= li 和 k <= wi,就可以將第 i個矩形切成邊長為 k的正方形。
  • [LeetCode] 850. Rectangle Area II 矩形面積之二
    這樣操作下來的話,整個所有的區域都被拆分成了很多個小矩形,每個矩形之間都不會有重複,最後只要分別計算每個小矩形的面積,並累加起來就是最終的結果了,參見代碼如下:解法一:class Solution {public: int rectangleArea(vector<vector<int>&
  • leetcode雞蛋掉落問題(egg drop)
    搜索後發現是leetcode上的一道經典面試題~因為過於經典,已經被踢出google面試題庫了(。)那我們就直接看看leetcode上的題目叭!leetcode現在有中文站,看起來更方便了:https://leetcode-cn.com/problems/super-egg-drop/solution/--你將獲得 K 個雞蛋,並可以使用一棟從 1 到 N  共有 N 層樓的建築。每個蛋的功能都是一樣的,如果一個蛋碎了,你就不能再把它掉下去。
  • leetcode鍊表之回文鍊表
    序本文主要記錄一下leetcode鍊表之回文鍊表題目
  • LeetCode刷題:Array系列之Remove Element
    = val)                nums[index++] = nums[i];        }        return index;    }    };2.3 測試代碼int main(){    using namespace std;    Solution sol;