lc 0219
✅ 463. 岛屿的周长
描述
给定一个包含 0 和 1 的二维网格地图,其中 1 表示陆地 0 表示水域。
网格中的格子水平和垂直方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。
岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。格子是边长为 1 的正方形。网格为长方形,且宽度和高度均不超过 100 。计算这个岛屿的周长。
示例 :
输入:
[[0,1,0,0],
[1,1,1,0],
[0,1,0,0],
[1,1,0,0]]
输出: 16
解释: 它的周长是下面图片中的 16 个黄色的边:
解答
way1: 关注每个是1 的方格,关注其上下左右,是边界吗?(是则+1)是0 吗?(是则+1)
way2: 直接遍历数组,只要前面有相邻的方格,就-2
cpp
- way1
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int res = 0;
for(int i = 0; i < grid.size(); i++) {
for (int j = 0; j < grid[i].size(); j++) {
if (grid[i][j] == 1) {
//up
if(i == 0) {
//first row
res++;
}
if(i > 0 && grid[i-1][j] == 0) {
res++;
}
//down
if(i == (grid.size() - 1)) {
//last row
res++;
}
if (i < (grid.size() - 1) && grid[i + 1][j] == 0) {
res++;
}
//left
if(j == 0) {
res++;
}
if(j > 0 && grid[i][j-1] == 0){
res++;
}
//right
if(j == grid[i].size() - 1) {
//last col
res++;
}
if (j < (grid[i].size() - 1) && grid[i][j+1] == 0) {
res++;
}
}
}
}
return res;
}
};
/*执行用时 :
112 ms
, 在所有 C++ 提交中击败了
18.37%
的用户
内存消耗 :
16.3 MB
, 在所有 C++ 提交中击败了
13.37%
的用户*/
way2
class Solution {
public:
int islandPerimeter(vector<vector<int>>& grid) {
int res = 0;
for(int i = 0; i < grid.size(); i++) {
for (int j = 0; j < grid[i].size(); j++) {
if (grid[i][j] == 1) {
res += 4;
if (i > 0 && grid[i-1][j] == 1) {
res -= 2;
}
if (j > 0 && grid[i][j-1] == 1) {
res -= 2;
}
}
}
}
return res;
}
};
/*执行用时 :
72 ms
, 在所有 C++ 提交中击败了
76.66%
的用户
内存消耗 :
16.4 MB
, 在所有 C++ 提交中击败了
13.37%
的用户*/
py
✅ 1122. 数组的相对排序
描述
给你两个数组,arr1 和 arr2,
arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
示例:
输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]
提示:
arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每个元素 arr2[i] 都出现在 arr1 中
解答
【错误】思路: 找到 arr2 的最左侧 的数组 x, 和最右侧的数字 y, 把arr1 中剩下的, 小于x 的数字,升序排好 的到 f, 把arr1 中剩下的,大于y 的, 升序排好, 得到g。
然后 返回: f + arr2 + g。 即可
正确 : 桶排序
Java题解:该题就是一个桶排序,先把arr2中的数按顺序拿完,在把桶中剩下的按顺序拿完。
public int[] relativeSortArray(int[] arr1, int[] arr2) {
int[] bucket = new int[1001];// java 帮你自动初始化 局部变量到0
for (int i = 0; i < arr1.length; i++)
bucket[arr1[i]]++;
int idx = 0;
for (int i = 0; i < arr2.length; i++)
while (bucket[arr2[i]] > 0) {
bucket[arr2[i]]--;
arr1[idx++] = arr2[i];
}
for (int i = 0; i < bucket.length; i++)
while (bucket[i] > 0) {
bucket[i]--;
arr1[idx++] = i;
}
return arr1;
}
cpp
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
int bucket[1001] = {0};
int res[1001];
int index = 0;
//arr1 all nums put in bucket
for (int i = 0; i < arr1.size(); i++) {
bucket[arr1[i]]++;
}
//find all nums in bucket which employ arr2 as sol
for(int i = 0; i < arr2.size(); i++) {
while(bucket[arr2[i]] > 0) {
//printf("%d:", arr2[i]);
res[index++] = arr2[i];
bucket[arr2[i]]--;
}
}
//printf("::%d:", index);
//for all nums left in bucket
for (int i = 0; i < 1001; i++) {
while (bucket[i] > 0) {
printf("bucket[%d] : %d,", i, bucket[i]);
res[index++] = i;
bucket[i]--;
}
}
vector<int> ret(res, res + sizeof(res) / sizeof(int));
return ret;
}
};// 该死的c sb初始化 todo 0219 rev below:
class Solution {
public:
vector<int> relativeSortArray(vector<int>& arr1, vector<int>& arr2) {
int bucket[1001] = {0};
int res[arr1.size()] = {0};
int index = 0;
//arr1 all nums put in bucket
for (int i = 0; i < arr1.size(); i++) {
bucket[arr1[i]]++;
}
//find all nums in bucket which employ arr2 as sol
for(int i = 0; i < arr2.size(); i++) {
while(bucket[arr2[i]] > 0) {
//printf("%d:", arr2[i]);
res[index++] = arr2[i];
bucket[arr2[i]]--;
}
}
//printf("::%d:", index);
//for all nums left in bucket
for (int i = 0; i < end(bucket) - begin(bucket); i++) {
while (bucket[i] > 0) {
printf("bucket[%d] : %d,", i, bucket[i]);
res[index++] = i;
bucket[i]--;
}
}
// 注意 构造函数:
vector<int> ret(res, res + sizeof(res) / sizeof(int));
return ret;
}
};// 该死的c sb初始化
/*执行用时 :
0 ms
, 在所有 C++ 提交中击败了
100.00%
的用户
内存消耗 :
9.2 MB
, 在所有 C++ 提交中击败了
9.25%
的用户*/
py
✅ 876. 链表的中间结点
https://leetcode-cn.com/problems/middle-of-the-linked-list
描述
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])
返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
示例 2:
输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
解答
思路: 遍历,计数,总长 为 n 那么,拿 奇数: n/2 ;;偶数(n + 1)/ 2
eg. 奇数 n = 5 >> 5 / 2 = 2 ;;ok (1, 2, 3, 4, 5)
eg. 偶数 n = 6 >> 6 + 1 = 7; 7 / 2 = 3 ;;ok (1, 2, 3, 4, 5, 6)
上述的思路,结合map 才能做好,但是c++ 的map 实在是非常难用
于是给出 java 双指针解法:
快慢指针,寻找中间节点,倒数第K节点,判断是否有环都可用这个来解决
public ListNode middleNode(ListNode head) {
ListNode fast=head,slow=head;
while(fast!=null && fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
return slow;
}
cpp
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode *fast = head, *slow = head;
while(fast != NULL && fast->next != NULL) {
fast = fast->next->next;
slow = slow->next;
}
return slow;
}
};
/*执行用时 :
4 ms
, 在所有 C++ 提交中击败了
64.24%
的用户
内存消耗 :
8.6 MB
, 在所有 C++ 提交中击败了
9.32%
的用户*/
✅ 1160. 拼写单词
https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters/
描述
给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写时,chars 中的每个字母都只能用一次。
返回词汇表 words 中你掌握的所有单词的 长度之和。
示例 1:
输入:words = ["cat","bt","hat","tree"], chars = "atach"
输出:6
解释:
可以形成字符串 "cat" 和 "hat",所以答案是 3 + 3 = 6。
示例 2:
输入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"
输出:10
解释:
可以形成字符串 "hello" 和 "world",所以答案是 5 + 5 = 10。
解答
如果用py 则是, 有个 set.issubset() 的方法可以用。
cpp
class Solution {
public:
int countCharacters(vector<string>& words, string chars) {
vector<int> htc(26);
for (char ch : chars) {
htc[ch - 'a']++;
}
int ans = 0;
for (string &w : words) {//tt todo 注意什么是 & 的意思
vector<int> htw(26);//tt 这到底构造出来了什么玩意?26 长的vector
int i;
for (i = 0; i < w.size(); i++) {
if (++htw[w[i] - 'a'] > htc[w[i] - 'a']) {
break;
}
}
if (i >= w.size()) {
ans += w.size();
}
}
return ans;
}
};
/*执行用时 :
60 ms
, 在所有 C++ 提交中击败了
91.29%
的用户
内存消耗 :
20.3 MB
, 在所有 C++ 提交中击败了
45.27%
的用户*/
他人java
有人比我更慢吗= = 我真的菜得可以
class Solution {
public int countCharacters(String[] words, String chars) {
String kkp=chars;
int count=0;
int number=0;
for (int i = 0; i < words.length; i++) {
for (int j = 0; j < words[i].length(); j++) {
if (chars.contains(String.valueOf(words[i].charAt(j)))){
int num=chars.indexOf(String.valueOf(words[i].charAt(j)));
chars=chars.substring(0,num)+chars.substring(num+1);
count++;
}
if (count==words[i].length()){
number+=count;
break;
}
}
count=0;
chars = kkp;
}
return number;
}
}
py
class Solution(object):
def countCharacters(self, words, chars):
"""
:type words: List[str]
:type chars: str
:rtype: int
"""
ans = 0
for w in words:
for i in w:
if w.count(i) <= chars.count(i):
flag = 1
continue
else:
flag = 0
break
if flag == 1:
ans+=len(w)
return ans
lc 0219的更多相关文章
- 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。
laviewpbt 2014.8.4 编辑 Email:laviewpbt@sina.com QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
- “LC.exe”错误
错误“LC.exe”已退出,代码为 -1. 可能的原因是: 这个第三方组件是个商业组件,他在组件的主使用类定义了 LicenseProvider(typeof(LicFileLicenseProvid ...
- 解决VS下“LC.exe已退出,代码为-1”问题
今天使用VS2015开发一个Winform程序,手一抖拖错了一个第三方控件,然后将其去掉并删除相关的引用,结果导致了LC.exe错误:"Lc.exe已退出,代码为-1 ". 经过上 ...
- 解析.NET 许可证编译器 (Lc.exe) 的原理与源代码剖析
许可证编译器 (Lc.exe) 的作用是读取包含授权信息的文本文件,并产生一个可作为资源嵌入到公用语言运行库可执行文件中的 .licenses 文件. 在使用第三方类库时,经常会看到它自带的演示程序中 ...
- Lc.exe已退出,代码为-1
编译项目,出现提示"Lc.exe已退出,代码为-1" . 解决办法: 意思就是把licenses.licx这个文件里的内容删除,但是文件还在(此时是个空文件),发生这个问题的原 ...
- "LC.exe" exited with code -1 错误
当打开一个VS程序时出现"LC.exe" exited with code -1错误,解决方法是: 删除licenses.licx文件即可
- LC.exe exited with code -1
昨天从win8.1升级到win10之后, 一切还算顺利, 就是升级时间比较长. 但是快下班的时候 遇到一个问题, 是之前在win8.1上没遇到的, 首先代码win8.1 vs2013 上跑的时候一切正 ...
- vs2012编译出错“LC.exe”已退出解决方法
“LC.exe”已退出,代码为 -1. 解决方法: 将项目Properties下的licenses.licx文件删除,重新编译即可.
- TT付款方式、前TT和后TT、LC信用证+TT付款方式
TT付款方式是以外汇现金方式结算,由您的客户将款项汇至贵公司指定的外汇银行账号内,可以要求货到后一定期限内汇款. .T/T属于商业信用,也就是说付款的最终决定权在于客户.T/T分预付,即期和远期.现在 ...
随机推荐
- dbGet (二)
dbGet是由它基本的语法加上各种object的attribute的组合构成的.大家在熟悉基本语法之后,就应该去学习各个object的attribute了.说实话,这很难,因为attribute很多, ...
- td标签内容:换行和不换行设置
td标签内容:换行和不换行设置 固定td内容不换行:<td style="white-space:nowrap">内容</td>或<td nowrap ...
- ThinkPhp5 中Volist标签的用法
Volist标签一般是和内置方法assign()搭配使用,将值从后台传到前台,是当下比较流行的一种传值方法 本文实例讲述了ThinkPHP模板循环输出Volist标签用法.分享给大家供大家参考,具体如 ...
- 普及C组第四题(8.2)
1342. [南海2009初中]cowtract(网络) (Standard IO) 题目: Bessie受雇来到John的农场帮他们建立internet网络.农场有 N (2<= N < ...
- centos长ping输出日志的脚本
为监控某服务器的网络情况,制作一个sh脚本,记录ping的长过程,并输出日志以备观察. 1.脚本如下 cat /home/summer/ping100.sh #!/bin/sh ping 172.16 ...
- Linux netstat命令详解(检验本机各端口的网络连接情况)
netstat命令用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP ...
- 使用pip安装速度慢问题的解决
参考博客:https://blog.csdn.net/u011580175/article/details/82292424 解决方案所以,在使用pip时,可以指定使用国内的下载源这样下载速度会快很多 ...
- 【读书笔记】--《编写高质量iOS与OS X代码的52个有效方法》
1.Objective-C 起源: 在 C 语言基础上添加了面向对象特性,是 C 语言的超集.Objective-C 由 SmallTalk 语言演变过来,使用消息结构,运行环境由运行环境决定. OC ...
- Python开发五子棋游戏【新手必学】
五子棋源码,原创代码,仅供 python 开源项目学习.目前电脑走法笨笨的,下一期版本会提高电脑算法ps:另外很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为 ...
- python中字符串的四种表达方式
今天在学习python的基础的内容,学习在python中如何操作字符串,在此记录下. 主要是python中字符串的几种表达,表示方式. python的几种表达方式 1 使用单引号扩起来字符串 > ...