[Swift]LeetCode611. 有效三角形的个数 | Valid Triangle Number
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10470002.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Given an array consists of non-negative integers, your task is to count the number of triplets chosen from the array that can make triangles if we take them as side lengths of a triangle.
Example 1:
Input: [2,2,3,4] Output: 3 Explanation: Valid combinations are: 2,3,4 (using the first 2) 2,3,4 (using the second 2) 2,2,3
Note:
- The length of the given array won't exceed 1000.
- The integers in the given array are in the range of [0, 1000].
给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数。
示例 1:
输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3
注意:
- 数组长度不超过1000。
- 数组里整数的范围为 [0, 1000]。
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 var nums = nums 4 var res:Int = 0 5 var n:Int = nums.count 6 nums.sort() 7 for i in stride(from:n - 1,through:2,by:-1) 8 { 9 var left:Int = 0 10 var right:Int = i - 1 11 while (left < right) 12 { 13 if nums[left] + nums[right] > nums[i] 14 { 15 res += (right - left) 16 right -= 1 17 } 18 else 19 { 20 left += 1 21 } 22 } 23 } 24 return res 25 } 26 }
76ms
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 var result = 0 4 guard nums.count >= 3 else { 5 return 0 6 } 7 var nums = nums.sorted() 8 for i in 0...nums.count - 2 { 9 let longest = nums[i] 10 var fast = i + 2 11 var slow = i + 1 12 while fast < nums.count { 13 while slow < fast && nums[i] + nums[slow] <= nums[fast] { 14 slow += 1 15 } 16 result += fast - slow 17 fast += 1 18 } 19 } 20 return result 21 } 22 }
124ms
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 guard nums.count >= 3 else { return 0 } 4 let sortedNums = nums.sorted { 5 return $0 < $1 6 } 7 var count = 0 8 let last = sortedNums.count - 1 9 print(sortedNums) 10 for i in 0..<last { 11 if sortedNums[i] == 0 { 12 continue 13 } 14 var k = i + 1 15 for j in i+1...last { 16 if sortedNums[j] == 0 { 17 continue 18 } 19 let sum = sortedNums[i] + sortedNums[j] 20 while k < sortedNums.count && sortedNums[k] < sum { 21 k += 1 22 } 23 count += (k - j - 1) 24 } 25 } 26 return count 27 } 28 }
128ms
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 let n = nums.sorted() 4 var ans = 0 5 for i in 0..<n.count { 6 var k = i + 1 7 for j in i + 1..<n.count { 8 while k + 1 < n.count && n[k + 1] < n[i] + n[j] { 9 k += 1 10 } 11 if n[k] < n[i] + n[j] { 12 ans += max(0,k - j) 13 } 14 } 15 } 16 return ans 17 } 18 }
232ms
1 class Solution { 2 // return the last index of a biggest number <= target 3 func binarySearch(_ nums: [Int], _ target: Int, _ start: Int, _ end: Int) -> Int { 4 var i = start, j = end 5 while i < j { 6 let m = (i + j) / 2 7 if nums[m] > target { j = m } 8 else { i = m + 1 } 9 } 10 return i-1 11 } 12 13 14 func triangleNumber(_ nums: [Int]) -> Int { 15 guard nums.count > 2 else { return 0 } 16 let nums = nums.sorted() 17 var res = 0 18 for i in 0..<(nums.count - 2) { 19 for j in i+1..<(nums.count - 1) { 20 res += binarySearch(nums, nums[i] + nums[j] - 1, j+1, nums.count) - j 21 } 22 } 23 return res 24 } 25 }
248ms
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 if nums.count < 3 { return 0 } 4 var res = 0 5 let nums = nums.sorted() 6 for i in 1..<nums.count - 1 { 7 var k = nums.count - 1 8 for j in (0..<i).reversed() { 9 let s = nums[j] + nums[i] 10 while k > i && nums[k] >= s { k -= 1 } 11 res += k - i 12 } 13 } 14 return res 15 } 16 }
1180ms、18948kb
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 if nums.count < 3 { 4 return 0 5 } 6 var count = 0 7 let nums_sorted = nums.sorted() 8 let maxNum = nums_sorted.last! 9 for i in 0..<nums_sorted.count { 10 11 for j in i+1..<nums_sorted.count { 12 let side1 = nums_sorted[i] 13 let side2 = nums_sorted[j] 14 var numOfValidThridNums = 0 15 for k in j+1..<nums_sorted.count { 16 if nums_sorted[k] < side1 + side2 { 17 numOfValidThridNums = numOfValidThridNums + 1 18 } else { 19 break; 20 } 21 } 22 count = count + numOfValidThridNums 23 } 24 } 25 return count 26 } 27 }
1584ms
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 4 var n = 0 5 let nums = nums.sorted() 6 for i in 0..<nums.count { 7 for j in i + 1..<nums.count { 8 for k in j + 1..<nums.count { 9 if nums[k] < nums[i] + nums[j] { 10 n += 1 11 } else { 12 break 13 } 14 } 15 } 16 } 17 return n 18 } 19 }
2332ms
1 class Solution { 2 func triangleNumber(_ nums: [Int]) -> Int { 3 let ct = nums.count 4 if ct < 3 { 5 return 0 6 } 7 var nums = nums.sorted { $0 > $1 } 8 var ans = 0 9 for i in 0..<ct-2 { 10 for j in (i+1)..<ct-1 { 11 for k in (j+1)..<ct { 12 if vailidTriangle(nums[i], nums[j], nums[k]) { 13 ans += 1 14 }else{ 15 break 16 } 17 } 18 } 19 } 20 return ans 21 } 22 23 func vailidTriangle(_ a: Int, _ b: Int, _ c: Int) -> Bool { 24 return (b+c>a) 25 } 26 }
转载于:https://www.cnblogs.com/strengthen/p/10470002.html
[Swift]LeetCode611. 有效三角形的个数 | Valid Triangle Number相关推荐
- leetcode 611. Valid Triangle Number | 611. 有效三角形的个数(Java)
题目 https://leetcode.com/problems/valid-triangle-number/ 题解 a, b, c 三指针,无剪枝优化,O(n^3),居然通过了. 思路是,用 a, ...
- 求图中三角形的个数(C++描述)
首先要给三角形的各个顶点标号,如右图所示.计算三角形的个数,首先要明确三角形的判定方法,怎么判断一个三角形是三角形.我们用边的相交来判定,在图中选择三条边,如果这三条边两两相交且交点就是某一条边的顶点 ...
- 611. 有效三角形的个数
611. 有效三角形的个数 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有效的组合是: 2,3,4 ( ...
- 判断三个数是否能构成三角形_【内含干货】611. 有效三角形的个数
点击蓝色"力扣加加"关注我哟 加个"星标",带你揭开算法的神秘面纱! ❝ 这是力扣加加第「9」篇原创文章 ❞ 题目地址(611. 有效三角形的个数) https ...
- 计算构成三角形的个数
题目描述 二维平面直角坐标系中有N个整形坐标点(x1,y1),(x2,y2),..(xN,yN),任意三个点都可能构成一个三角形,计算构成三角形的个数. 输入描述 输入有两行: 第一行为N. 3 ≤ ...
- Leetcode 611 有效三角形的个数
611. 有效三角形的个数 难度中等321收藏分享切换为英文接收动态反馈 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出 ...
- #10. 三角形的个数
[题目描述]: 给出n条长度完全不同的线段,从中任选3 条,问能组成多少个不同的三角形? [输入描述]: 第一行为线段的条数n; 第二行有n 个数,即n 条线段的长度,各个数之间用一个空格隔开. [输 ...
- 611.有效三角形的个数
611.有效三角形的个数 贴个题目: 贴个示例: 解题思路: 这道题目,涉及了一个初二的数学知识: 三角形的两边之和大于第三边: 即:a+b>c 也就是这一道题,我们需要做的是,使用两条边,找到 ...
- 能否构成三角形的条件代码_leetcode No.611 有效三角形的个数
题目链接: 611. 有效三角形的个数 - 力扣(LeetCode)leetcode-cn.com 题目描述: 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 ...
最新文章
- Android 活动与活动间数据传递--登录注册页面
- c语言整形数组相加,[c语言]将两个整形升序数组合并为一个升序数组
- Java并发编程:线程池
- Android项目的目录结构
- 看文艺青年怎么玩微信客户端
- unity 关闭自己脚本_unity中使用代码控制脚本的开启和关闭 enabled
- php memcache可存,php使用memcache共享存储session(二)
- C语言游戏传递小秘密,C语言的那些小秘密之链表
- 鉴权必须了解的5个知识点:cookie,session,token,jwt,单点登录
- JEECG-P3首个开源插件诞生!CMS网站插件 Jeecg-p3-biz-cms1.0版本发布!
- python字典嵌套列表怎么访问值的某个元素_python – 访问嵌套在字典中的值
- 动态规划: 投资分配问题
- 简单的Java代码实现斗地主
- 我的青春谁做主——经典台词之人生哲理
- 计算字符串长度函数大全
- 2019上半年个人成长复盘
- html中电子邮件地址怎么写,电子邮件地址怎么写
- android 机器人gif,看完这15张GIF图 就再也不用担心机器人叛乱了
- 洛谷 P3426 [POI2005]SZA-Template
- 前向差分、后向差分和中心差分误差分析
热门文章
- 使用 SVG 实现圆环日期选择器
- 技术沙龙|这期我们聊聊软件工程师的区块链升级挑战(杭州)
- 【Linux】压缩与解压zip
- pdf怎么转换成jpg或png图片?
- 【学术】我读科学网“马臻”老师博客体会
- ArcGIS Pro2.7 导入obj模型后贴图丢失问题
- html弹性盒子布局,div+css3弹性盒子(flex box)布局
- CSS3弹性盒子布局
- 翻译: Deep Convolutional Neural Networks for Breast Cancer Histology Image Analysis
- 在安全创新的道路上飞奔