Greedy Algorithm EASY 21.11.07
942. 增减字符串匹配
解题思路
- 如果第一个是I,那么就给第一个安排最小值,这样后面的数一定是大于这个最小值的
- 如果第一个是D,那么就给第一个安排最大值,这样后面的数一定是小于这个最大值的
- 然后把选出来的数剔除,后面的步骤和思想和安排第一个数时相同
代码实现
1. Python实现
class Solution(object):
def diStringMatch(self, s):
"""
:type s: str
:rtype: List[int]
"""
lis = []
head = 0
tail = len(s)
for i in s:
if i == 'I':
lis.append(head)
head += 1
else:
lis.append(tail)
tail = tail - 1
lis.append(head)
return lis
2. Java实现
class Solution {
public int[] diStringMatch(String s) {
int head = 0;
int tail = s.length();
int[] lis = new int[tail + 1];
for (int i = 0; i < s.length(); i++){
if (s.charAt(i) == 'I'){
lis[i] = head;
head += 1;
}else {
lis[i] = tail;
tail -= 1;
}
}
lis[s.length()] = head;
return lis;
}
}
新学Java知识:
//1.数组定义
//数组类型 数组名称 = new 数组类型[长度];
int[] array = new int[length];
//2.字符串长度
s.length();
//而数组长度是
array.length;
//3.字符串遍历
s.charAt(i)
976. 三角形的最大周长
解题思路
把最大的三个值慢慢往小调,直到满足三角形两边之和大于第三边这个条件。如果超出数组长度,就返回0。
代码实现
1. Python实现
class Solution(object):
def largestPerimeter(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
short = nums[-3]
mid = nums[-2]
Long = nums[-1]
index = -4
flag = True
while short + mid <= Long:
if -index > len(nums):
return 0
short, mid, Long = nums[index], short, mid
index = index - 1
else:
return short + mid + Long
2. Java实现
class Solution {
public int largestPerimeter(int[] nums) {
Arrays.sort(nums);
int first = nums[nums.length -3];
int mid = nums[nums.length - 2];
int last = nums[nums.length - 1];
int index = nums.length - 4;
while (first + mid <= last){
if (index < 0){
return 0;
}
last = mid;
mid = first;
first = nums[index];
index -= 1;
}
return first + mid + last;
}
}
明日预告
MySQL简单题 非会员10道。