一个月速刷leetcodeHOT100 day02

今天的三道题

移动零

在双指针分组里的简单题
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
输入: nums = [0]
输出: [0]

//我的做法是直接删0,后面补0
function moveZeroes(nums){

//获取数组长度

let len = nums.length;

for(let i =0;i<len;i++){
//当数组哪个位置是0 ,就删除这个这个位置的元素,然后在末尾补 0
//从而就达到了 把所有0移动到数组末尾的要求且保持的非零元素的相对顺序
if(nums[i]==0){
nums.splice(i,1)
nums.push(0)
//当为0的元素删除后,下一个元素就会前进一位占据该位置,所以要从该位置在进行判断
i--
//当移动到末尾的元素,就不用再一次进行遍历了,所以遍历的长度要减去1位
len--

}

}

}

//排序做法
//
function moveZeroes(nums){
let j = 0;
for (let i= 0; i< nums.length; i++) {
if(arr[i] !== 0){
let temp = nums[j]
nums[j] = nums[i]
nums[i] = temp
j++
}
}
}

有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。
    栈的简单题
var isValid = function (s) {
    const map = {
        ')': '(',
        '}': '{',
        ']': '['
    };

    const stack = [];

    for (let c of s) {
        //如果当前字符 c 是右括号(即 map[c] 有值)
        if (map[c]) { 
            const opposite = stack.pop();
            if (map[c] !== opposite) return false;
        } else {
            stack.push(c);
        }
    }

    return stack.length === 0;
};

字母异位词分组

哈希表 中等难度
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:[[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [""]
输出: [[“”]]
示例 3:
输入: strs = ["a"]
输出: [[“a”]]

var groupAnagrams = function(strs) {
    let hash = new Map()
    
    for(let i = 0; i < strs.length; i++) {
    // 重点就是 通过排序将字母相同的归为一类 
        let str = strs[i].split('').sort().join()
        if(hash.has(str)) {
        //
            let temp = hash.get(str)
            temp.push(strs[i])
            hash.set(str,temp)
        } else {
	    // 将strs[i]存为数组 这样遇到相同字母好增加
            hash.set(str, [strs[i]])
        }
    }
    
    return [...hash.values()]
};
  • 11
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值