leecode刷题(2021-12-23)

1.两数之和

 1 /**
 2  * @param {number[]} nums
 3  * @param {number} target
 4  * @return {number[]}
 5  */
 6 var twoSum = function(nums, target) {
 7     for(let i=0;i<nums.length;i++){
 8         let rest = target - nums[i]
 9         nums[i] = NaN
10         if(nums.includes(rest)){
11             let index = nums.indexOf(rest)
12             return [i,index]
13         }
14     }
15 };

 

2.回文数

 1 /**
 2  * @param {number} x
 3  * @return {boolean}
 4  */
 5 var isPalindrome = function(x) {
 6     if(x===0) return true
 7     if(x<0 || x%10===0) return false
 8     let str = x.toString()
 9     if(str.split('').reverse().join('')===str){
10         return true
11     }else{
12         return false
13     }
14 };

 

3.罗马数字转整形

 1 /**
 2  * @param {string} s
 3  * @return {number}
 4  */
 5 var romanToInt = function(s) {
 6     let total = 0
 7     let romanArr = s.split('')
 8     for (let i=0;i<romanArr.length;i++) {
 9         if(romanArr[i]+romanArr[i+1] === 'IV'){
10             total += 4
11             i++
12             continue
13         }
14         if(romanArr[i]+romanArr[i+1] === 'IX'){
15             total += 9
16             i++
17             continue
18         }
19         if(romanArr[i]+romanArr[i+1] === 'XL'){
20             total += 40
21             i++
22             continue
23         }
24         if(romanArr[i]+romanArr[i+1] === 'XC'){
25             total += 90
26             i++
27             continue
28         }
29         if(romanArr[i]+romanArr[i+1] === 'CD'){
30             total += 400
31             i++
32             continue
33         }
34         if(romanArr[i]+romanArr[i+1] === 'CM'){
35             total += 900
36             i++
37             continue
38         }
39         if(romanArr[i] === 'I'){
40             total += 1
41             continue
42         }   
43         if(romanArr[i] === 'V'){
44             total += 5
45             continue
46         }  
47         if(romanArr[i] === 'X')
48         {
49             total += 10
50             continue
51         }  
52         if(romanArr[i] === 'L'){
53             total += 50
54             continue
55         }  
56         if(romanArr[i] === 'C'){
57             total += 100
58             continue
59         }  
60         if(romanArr[i] === 'D'){
61             total += 500
62             continue
63         }  
64         if(romanArr[i] === 'M'){
65             total += 1000
66             continue
67         }  
68     }
69     return total
70 };

 

4.最长公共前缀

 1 /**
 2  * @param {string[]} strs
 3  * @return {string}
 4  */
 5 var longestCommonPrefix = function(strs) {
 6     let index = -1
 7     let minLength = 300
 8     let res = ""
 9     const newArr = []
10     strs.forEach(item =>{
11         if(minLength>item.length) minLength = item.length
12         newArr.push(item.split(''))
13     })
14     for(let i=0;i<minLength;i++){
15         if(newArr.every(item=>{return item[i] === newArr[0][i]})) {
16             index = i
17         }else{
18             break
19         }
20     }
21     if(index === -1){
22         return ""
23     }else{
24         for(let j=0;j<=index;j++){
25             res += newArr[0][j]
26         }
27         return res
28     }
29 };

 

5.有效的括号

 1 /**
 2  * @param {string} s
 3  * @return {boolean}
 4  */
 5 var isValid = function(s) {
 6     const arr = s.split('')
 7     const stack = []
 8     let flag = true
 9     if(arr.length%2!==0){
10         return false
11     }
12     arr.forEach(item =>{
13         if(item==='(' || item==='[' || item ==='{'){
14             stack.push(item)
15         }else{
16             if(item === ')'){
17                 if (stack.pop()!=='(') flag = false //这里用return不起作用,还待研究
18             }
19             if(item === ']'){
20                 if (stack.pop()!=='[') flag = false
21             }
22             if(item === '}'){
23                 if (stack.pop()!=='{') flag = false
24             }
25         }
26     })
27     if(stack.length===0){
28         return true && flag
29     }else{
30         return false
31     }
32 
33 };

 

6.存在重复元素

1 /**
2  * @param {number[]} nums
3  * @return {boolean}
4  */
5 var containsDuplicate = function(nums) {
6    return nums.length === [...new Set(nums)].length ?  false :  true
7 };

 

7.最大子数组和

我的暴力解法超时,但也想记录一下,代码如下:

 1 /**
 2  * @param {number[]} nums
 3  * @return {number}
 4  */
 5 var maxSubArray = function(nums) {
 6   let max = -Infinity
 7   let temp = 0
 8   if(nums.length===1){
 9     return nums[0]
10   }
11   for(let i=0;i<nums.length;i++){
12     temp =nums[i]
13     if(max<temp){
14       max = temp
15     }
16     for(let j=i+1;j<nums.length;j++){
17       temp = temp+nums[j]
18       if(max<temp){
19         max = temp
20       }else{
21         continue
22       }
23     }
24   }
25   return max
26 };

动态规划方法:

 1 /**
 2  * @param {number[]} nums
 3  * @return {number}
 4  */
 5 var maxSubArray = function(nums) {
 6     let ans = nums[0];
 7     let sum = 0;
 8     for(let num of nums) {
 9         if(sum + num > num ){
10             sum = sum + num;
11         } else {
12             sum = num;
13         }
14         ans = Math.max(ans, sum);
15     };
16     return ans;
17 };

 

posted @ 2021-12-23 12:50  凉之光ca  阅读(52)  评论(0)    收藏  举报