局部最小值位置、元素最左出现、循环有序数组最小值
来源:互联网 发布:牧在线网络汉语汉字典 编辑:程序博客网 时间:2024/06/07 16:11
- 局部最小值位置
- 元素最左出现
- 循环有序数组最小值
局部最小值位置
定义局部最小的概念。arr长度为1时,arr[0]是局部最小。arr的长度为N(N>1)时,如果arr[0] < arr[1],那么arr[0]是局部最小;如果arr[N-1]< arr[N-2],那么arr[N-1]是局部最小;如果0 < i < N-1,既有arr[i]< arr[i-1]又有arr[i] < arr[i+1],那么arr[i]是局部最小。给定无序数组arr,已知arr中任意两个相邻的数都不相等,写一个函数,只需返回arr中任意一个局部最小出现的位置即可。
参考答案
public class Solution { public int getLessIndex(int[] arr) { if (arr == null || arr.length == 0) { return -1; // no exist } if (arr.length == 1 || arr[0] < arr[1]) { return 0; } if (arr[arr.length - 1] < arr[arr.length - 2]) { return arr.length - 1; } int left = 1; int right = arr.length - 2; int mid = 0; while (left < right) { mid = (left + right) / 2; if (arr[mid] > arr[mid - 1]) { right = mid - 1; } else if (arr[mid] > arr[mid + 1]) { left = mid + 1; } else { return mid; } } return left; }}
元素最左出现
对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。
给定一个数组arr及它的大小n,同时给定num。请返回所求位置。若该元素在数组中未出现,请返回-1。
# 测试样例:[1,2,3,3,4],5,3# 返回:2
我的提交
# -*- coding:utf-8 -*-class LeftMostAppearance: def findPos(self, arr, n, num): # write code here if n <= 0: return -1 if n == 1 and arr[0] == num: return 0 if arr[0] > num: return -1 if arr[n-1] < num: return -1 left = 0 right = n-1 while left < right: print(str(left) + " : " + str(right) + " --> " + str(arr[left:right+ 1])) mid = left + (right - left)// 2 if num < arr[mid]: right = mid - 1 elif num > arr[mid]: left = mid + 1 else: right = mid print(str(left) + " : " + str(right) + " --> " + str(arr[left:right+ 1])) print() if arr[left] == num: return left return -1if __name__ == '__main__': left = LeftMostAppearance() print(left.findPos([1,2,3,3,4],5,3))
参考答案
class LeftMostAppearance: def findPos(self, arr, n, num): res = -1 lft = 0 rgt = n - 1 while lft <= rgt: mid = lft + (rgt - lft) / 2 if arr[mid] < num: lft = mid + 1 elif arr[mid] > num: rgt = mid - 1 else: res = mid rgt = rgt - 1 return res
循环有序数组最小值
对于一个有序循环数组arr,返回arr中的最小值。有序循环数组是指,有序数组左边任意长度的部分放到右边去,右边的部分拿到左边来。比如数组[1,2,3,3,4],是有序循环数组,[4,1,2,3,3]也是。
给定数组arr及它的大小n,请返回最小值。
#测试样例:[4,1,2,3,3],5#返回:1
我的提交
# -*- coding:utf-8 -*-class MinValue: def getMin(self, arr, n): # write code here left = 0 right = n - 1 if arr[left] < arr[right]: return arr[left] while left < right: mid = left + (right - left) // 2 if arr[left] > arr[mid]: right = mid elif arr[mid] < arr[right]: left = mid else: mindex = left for i in range(left, right + 1): if arr[i] < arr[mindex]: mindex = i return arr[mindex]
参考答案
import java.util.*;public class MinValue { public int getMin(int[] arr,int n) { if (arr == null || arr.length == 0) { return -1; } int low = 0; int high = arr.length - 1; int mid = 0; while (low < high) { if (low == high - 1) { break; } if (arr[low] < arr[high]) { return arr[low]; } mid = (low + high) / 2; if (arr[low] > arr[mid]) { high = mid; continue; } if (arr[mid] > arr[high]) { low = mid; continue; } while (low < mid) { if (arr[low] == arr[mid]) { low++; } else if (arr[low] < arr[mid]) { return arr[low]; } else { high = mid; break; } } } return Math.min(arr[low], arr[high]); }}
阅读全文
0 0
- 局部最小值位置、元素最左出现、循环有序数组最小值
- 循环有序数组最小值
- 循环有序数组最小值
- 循环有序数组最小值练习
- [牛客网--左老师]局部最小值位置
- 【算法】有序数组循环右移后求最小值
- 局部最小值位置
- 局部最小值位置练习题
- 局部最小值位置练习
- 局部最小值位置
- 循环有序数组(旋转数组)的最小值
- 数组------最短排序+左右最值最大差+局部最小值位置+子数组最大乘积+多数组中位数
- 二分搜索——找出有序循环数组中的最小值
- 循环数组-找出最小值
- 求一维数组中元素的最大值和最小值和位置
- 局部最小值
- 每日一练-----局部最小值位置
- 二分搜索——局部最小值位置
- SQL 简单查询
- 速度版运动框架(获得属性+requestAnimationFrame请求动画帧)
- 群体智能优化算法之粒子群优化算法
- ActivityThread启动源码解析
- Linux运维攻城狮必会的10大工具
- 局部最小值位置、元素最左出现、循环有序数组最小值
- 搜狐2017校招编程题
- Android基本布局与控件(待完善)
- 2073活动选择问题
- MySQL多版本并发控制分析 事务
- 【搜狐8.28】装箱子
- 冒泡排序代码
- 测试一下
- 【hpu oj 1010 QAQ的序列价值 [数学、状态压缩]】