日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

快起床刷题去,别人把你offer拿走啦

發布時間:2023/11/28 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快起床刷题去,别人把你offer拿走啦 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

好久沒有上力扣刷題咯,又到了關鍵的時刻,卻忘得零零散散,囧~
話說,刷題、學算法、常用,這些技能才能長在身上!

上一道剛剛遇到的正菜~
題:給定一個整數數組 nums 和一個目標值 k,請實現一個方法判斷 nums 中是否存在某個片段(即若干個相連元素)之和等于 k。要求時間復雜度為 O(n)。
public boolean checkSum(int[] nums, int k) {// Write your code here.
}

首先分析題目,題目大意為:能否從一段數里找一段連續的數,組成這個給定的和。
這題第一眼:簡單,這玩意兒弄倆指針劃拉劃拉就解決了。噫,一個指針就夠了。
第二眼:這些好像怎么也不可能復雜度是O(n)啊~
怎么搞呢?
先看一下我第一次寫的代碼:

	{Map hashMap = new HashMap();int len = nums.length;int sum = 0;int index = 0;for (int i = 0;i < len;i++){sum += nums[i];if (!hashMap.containsKey(sum)){hashMap.put(sum,index);}if(sum > k){sum = 0;i = index++;}else if(sum == k){return true;}}return false;}

哈哈哈哈 我用了一個for,但是時間復雜度是O(n2)。吐了吐了~
真的是腦袋空白,沒有思路了。翻了下之前的LeetCode的刷題記錄,找到new一個數組的靈感。
如果我使用一個數組,就可以將一些計算記錄存放起來,作用能頂一個指針!
于是,就有了新的想法,以下代碼注釋充分,常人可充分理解,若有不明請留言,言無不盡。

public static boolean checkSum(int[] nums, int k) {int len = nums.length;//使用一個數組存放前n項的和int sum [] = new int[len+1];HashMap hashMap = new HashMap();//第一圈循環 將到每個位置的和計算出來,放在數組中,再將數組中的元素下標存入hashmap中for (int i = 0; i < len; i++) {sum[i+1] = sum[i]+nums[i];//這里必須進行判斷,若兩個位置的和結果相等//如果有某個位置先得出一個和,則使用該和,這樣在之后出現同樣的和不會被覆蓋if(!hashMap.containsKey(sum[i+1])){hashMap.put(sum[i+1],i);}}//如果有某個位置的和+k 能夠等于下一個和//如,i處的和為10 而j處的和為20   i到j這段區間的和即為20-10for (int i = len; i > 0; i--) {if (hashMap.containsKey(sum[i]-k)){return true;}}return false;}

以上~ 自己還是一顆小白菜,學習 學習去吧!

總結

以上是生活随笔為你收集整理的快起床刷题去,别人把你offer拿走啦的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。